TypeScript 特殊类型
TypeScript 具有特殊类型,可能不指代任何特定类型的数据。
类型:任意
any
是一种禁用类型检查并实际上允许使用所有类型的类型。
下面的例子不使用 any
并会引发错误:
示例无 any
让 u = true;
u = "string"; // 错误:类型“string”不能分配给类型“boolean”。
Math.round(u); // 错误:'boolean' 类型的参数不能分配给'number' 类型的参数。
亲自尝试 »
环境 any
特殊类型any
禁用类型检查:
any
可以成为一种有用的方法来避免错误,因为它会禁用类型检查,但 TypeScript 将无法提供类型安全,并且依赖类型数据的工具(例如自动完成)将不起作用。请记住,应该不惜一切代价避免它...
类型:未知
unknown
是一种类似但更安全的替代方案any
.
TypeScript 将阻止 unknown
类型被使用,如下例所示:
设 w:未知 = 1;
w = "string"; // 没有错误
w = {
运行ANonExistentMethod:()=> {
console.log("我思故我在");
}
} 作为 { runANonExistentMethod: () => void}
// 当我们不知道类型时,如何避免下面注释掉的代码的错误?
// w.runANonExistentMethod(); // 错误:对象类型为“未知”。
如果(typeof w ==='object'&& w!== null){
(w 作为 { runANonExistentMethod:Function })。runANonExistentMethod();
}
// 尽管我们必须多次转换,但我们可以在 if 中进行检查以确保我们的类型并进行更安全的转换
亲自尝试 »
将上面的例子与前面的例子进行比较, any
.
unknown
最适合在您不知道输入的数据类型时使用。若要稍后添加类型,您需要对其进行强制转换。
当我们使用“as”关键字来表示属性或变量属于转换类型时,就是转换类型。
类型:从不
never
无论何时定义它,都会有效地引发错误。
let x: never = true; // 错误:类型“boolean”不能分配给类型“never”。
亲自尝试 »
never
很少使用,尤其是单独使用时;其主要用于高级泛型。
类型:undefined & null
undefined
和null
是引用 JavaScript 基本类型undefined
和null
分别。
让 y:未定义 = 未定义;
让 z: null = null;
亲自尝试 »
这些类型没什么用,除非 strictNullChecks
已启用tsconfig.json
文件。