On this page

TypeScript 特殊类型

TypeScript 具有特殊类型,可能不指代任何特定类型的数据。


类型:any

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 将无法提供类型安全,并且依赖类型数据的工具(例如自动完成)将不起作用。请记住,应该不惜一切代价避免它...


类型:unknown

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

将上面的例子与前一个示例进行比较,其中anyunknown最适合在您不知道输入的数据类型时使用。若要稍后添加类型,您需要对其进行强制转换。 当我们使用“as”关键字来表示属性或变量属于强制类型时,即进行强制转换。


类型:never

never无论何时定义它,都会有效地引发错误。 let x: never = true; // Error: Type 'boolean' is not assignable to type 'never'.

never很少使用,尤其是单独使用时,其主要用于高级泛型。


类型:undefined & null

undefined和分别null是引用 JavaScript 原语和的undefined类型null 。 let y: undefined = undefined; let z: null = null;

strictNullChecks除非在文件中启用,否则这些类型没有多大用处tsconfig.json