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,否则这些类型没有多大用处。

