类型推导
如果没有明确的指定类型,那么 TypeScript 会依照类型推导(Type Inference)的规则推断出一个类型。
定义变量
let foo = 123; // foo 是 'number'
let bar = 'hello'; // bar 是 'string'
foo = bar; // Error: 不能将 'string' 赋值给 `number`
使用 const 定义的变量和使用 let 定义的变量,类型不同:
const a = 'foo' // a 的类型就是 'foo'
let b: string = 'foo' // b 的类型是 string
函数
参数
type Sum = (a: number, b: number) => number;
let foo: Sum = (a, b) => {
a = 'hello'; // Error:不能把 'string' 类型赋值给 'number' 类型
return a + b;
};
返回类型
function add(a: number, b: number) {
return a + b;
}
结构化
对象字面量
let foo = {
a: 123,
b: 456
};
foo.a = 'hello'; // Error:不能把 'string' 类型赋值给 'number' 类型
数组
let bar = [1, 2, 3];
bar[0] = 'hello'; // Error:不能把 'string' 类型赋值给 'number' 类型
解构
对象字面量
let foo = {
a: 123,
b: 456
};
let { a } = foo;
a = 'hello'; // Error:不能把 'string' 类型赋值给 'number' 类型
数组
let bar = [1, 2];
let [a, b] = bar;
a = 'hello'; // Error:不能把 'string' 类型赋值给 'number' 类型
tip
如果定义的时候没有赋值,不管之后有没有赋值,都会被推断成 any 类型而完全不被类型检查