Skip to main content

类型推导

如果没有明确的指定类型,那么 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 类型而完全不被类型检查

参考文档

深入理解 TypeScript