一、变量初始化
这是类型推断最常见、也最直观的场景。简单来说,当你在声明一个变量或常量时,如果同时进行了初始化,TypeScript会根据你赋的值自动推断出它的类型。
typescript
// 基础类型推断
let name = "Alice"; // TypeScript 推断 name 的类型是 string
let age = 30; // TypeScript 推断 age 的类型是 number
let isStudent = true; // TypeScript 推断 isStudent 的类型是 boolean
// 复杂类型也不在话下
const user = {
id: 1,
name: "Bob"
};
// TypeScript 推断 user 的类型是 { id: number; name: string; }
const numbers = [1, 2, 3];
// TypeScript 推断 numbers 的类型是 number[]
// 尝试给它们赋一个错误的类型,守护者会立刻现身!
name = 123; // Error:不能将类型"number"分配给类型"string".
关键点 :let
和 const
的推断有所不同。const
因为不可变,TypeScript会推断出更精确的字面量类型。
typescript
let greeting = "hello"; // 类型是 string
const constGreeting = "hello"; // 类型是 "hello"
二、函数返回类型
根据
return
语句,来推断函数的返回值类型
typescript
function add(a: number, b: number) {
return a + b; // 返回number类型
}
三、赋值
函数参数类型/返回值也能通过赋值来推断
typescript
type Adder = (a: number, b: number) => number;
let foo: Adder = (a, b) => {
a = 'hello'; // Error:不能把 'string' 类型赋值给 'number' 类型
return a + b;
};
解析:
foo
的类型是Adder
,他能推导出foo
的参数a
、b
是number
类型。
四、组合
示例:解构赋值
typescript
function returnType(a:string, b:number){
return [a, b]
}
let [str, num] = returnType('hello', 100);
console.log(str, num); // hello 100
console.log(typeof str, typeof num); // string number
总结
如果你喜欢本教程,记得点赞+收藏!关注我获取更多JavaScript/TypeScript开发干货