TypeScript 特殊类型
TypeScript 具有可能不引用任何特定数据类型的特殊类型。
类型: any
any
是一种禁用类型检查并有效地允许使用所有类型的类型。
下面的例子没有使用any
,会抛出错误:
没有any
的例子
let u = true;
u = "string"; // 错误:类型"字符串"不可分配给类型"布尔"。
Math.round(u); // 错误:"布尔"类型的参数不可分配给"数字"类型的参数。
亲自试一试 »
将 any
设置为特殊类型 any
会禁用类型检查:
any
实例
let v: any = true;
v = "string"; // 没有错误,因为它可以是"any"类型
Math.round(v); // 没有错误,因为它可以是"any"类型
亲自试一试 »
any
可以成为过去错误的有用方法,因为它禁用类型检查,但 TypeScript 将无法提供类型安全和依赖类型数据的工具 ,如自动完成,将不起作用。 请记住,应该以"any"避免它......
类型: unknown
unknown
与 any
类似,但更安全。
TypeScript 将阻止使用 unknown
类型,如下例所示:
let w: unknown = 1;
w = "string"; // 没有错误
w = {
runANonExistentMethod: () => {
console.log("I think therefore I am");
}
} as { runANonExistentMethod: () => void}
// 当我们不知道类型时,我们如何避免下面注释掉的代码的错误?
// w.runANonExistentMethod(); // Error: Object is of type 'unknown'.
if(typeof w === 'object' && w !== null) {
(w as { runANonExistentMethod: Function }).runANonExistentMethod();
}
// 虽然我们必须多次施法,但我们可以检查 if 以确保我们的类型并进行更安全的施法
亲自试一试 »
比较上面的例子和前面的例子,any
。
unknown
最好在您不知道要输入的数据类型时使用。 要稍后添加类型,您需要强制转换它。
铸造是我们使用"as"关键字来表示属性或变量属于铸造类型。
类型: never
never
在定义时有效地抛出错误。
let x: never = true; // 错误:类型"布尔"不可分配给类型"never"。
亲自试一试 »
never
很少使用,尤其是它本身,它的主要用途是在高级泛型中。
类型: undefined & null
undefined
和 null
是指 JavaScript 原语 undefined
和 null
。
let y: undefined = undefined;
let z: null = null;
亲自试一试 »
除非在 tsconfig.json
文件中启用了 strictNullChecks
,否则这些类型没有多大用处。