TypeScript 具有特殊类型,可能不引用任何特定类型的数据。
any
是一种禁用类型检查并有效地允许使用所有类型的类型。
下面的例子没有使用any
并会抛出错误:
any
let u = true;
u = "string"; // Error: Type 'string' is not assignable to type 'boolean'.
Math.round(u); // Error: Argument of type 'boolean' is not assignable to parameter of type 'number'.
亲自试一试 »
环境any
到特殊类型any
禁用类型检查:
any
let v: any = true;
v = "string"; // no error as it can be "any" type
Math.round(v); // no error as it can be "any" type
亲自试一试 »
any
可以是解决过去错误的有用方法,因为它禁用类型检查,但 TypeScript 将无法提供类型安全性,并且依赖类型数据的工具(例如自动完成)将无法工作。请记住,应以"any" 成本避免这种情况...
unknown
是一种类似但更安全的替代品any
。
TypeScript 会阻止unknown
类型被使用,如下面的示例所示:
let w: unknown = 1;
w = "string"; // no error
w = {
runANonExistentMethod: () => {
console.log("I think therefore I am");
}
} as { runANonExistentMethod: () => void}
// How can we avoid the error for the code commented out below when we don't know the type?
// w.runANonExistentMethod(); // Error: Object is of type 'unknown'.
if(typeof w === 'object' && w !== null) {
(w as { runANonExistentMethod: Function }).runANonExistentMethod();
}
// Although we have to cast multiple times we can do a check in the if to secure our type and have a safer casting
亲自试一试 »
将上面的示例与前面的示例进行比较,其中any
。
unknown
当您不知道键入的数据类型时最好使用。要稍后添加类型,您需要对其进行强制转换。
强制转换是指我们使用 "as" 关键字来表示属性或变量属于强制转换类型。
never
只要定义它,就会有效地抛出错误。
let x: never = true; // Error: Type 'boolean' is not assignable to type 'never'.
亲自试一试 »
never
很少使用,尤其是单独使用,它的主要用途是高级泛型。
undefined
和null
是引用 JavaScript 原语的类型undefined
和null
分别。
let y: undefined = undefined;
let z: null = null;
亲自试一试 »
这些类型没有多大用处,除非strictNullChecks
已启用在tsconfig.json
文件。
截取页面反馈部分,让我们更快修复内容!也可以直接跳过填写反馈内容!