1、使用 any
类型:
在 TypeScript 中,使用 any
类型来表示一个变量可以是任何类型。这相当于关闭了类型检查,允许变量接受任何类型的值。
let variable: any = 42;
variable = "Hello"; // 合法
variable = true; // 合法
2、使用联合类型(Union Types):
如果知道变量可能属于几种类型之一,可以使用联合类型来定义。
let variable: number | string = 42;
variable = "Hello"; // 合法
variable = true; // 不合法
3、使用类型断言(Type Assertions):
如果知道变量的实际类型,但 TypeScript 无法推断出来,可以使用类型断言来告诉编译器变量的类型。
let variable: unknown = 42;
if (typeof variable === "string") {
let length: number = variable.length; // 合法
}
4、使用类型推断(Type Inference):
TypeScript 具有类型推断能力,可以根据变量的初始值自动推断出变量的类型。
let variable = 42; // TypeScript 推断 variable 为 number 类型
variable = "Hello"; // 不合法
5、使用 unknown
类型:
unknown
类型是 TypeScript 3.0 引入的一个类型,它表示变量的类型是未知的。与 any
类型不同,unknown
类型不允许进行任何操作,除非你先进行类型检查或类型断言。
let variable: unknown = 42;
if (typeof variable === "string") {
let length: number = variable.length; // 合法
}
6、使用类型保护(Type Guards):
在运行时通过类型保护来确定变量的类型,然后进行相应的操作
function processValue(value: number | string) {
if (typeof value === "number") {
// value 是 number 类型
console.log(value.toFixed(2));
} else {
// value 是 string 类型
console.log(value.toUpperCase());
}
}
7、使用接口或类型别名(Interfaces or Type Aliases):
如果知道变量的结构,但不确定具体的类型,可以使用接口或类型别名来定义一个结构化的类型。
interface User {
name: string;
age?: number;
}
let user: User = { name: "Alice" };
user = { name: "Bob", age: 30 }; // 合法