Skip to content
On this page

其他类型

any

TypeScript 有一种特殊的类型,即 any,只要不想让特定值导致类型检查错误,就可以使用它。

当一个值是 any 类型时,您可以访问它的任何属性(这些属性反过来也是 any 类型),像函数一样调用它,将它赋值给(或从)任何类型的值,或几乎任何其他语法上合法的值:

ts
let obj: any = { x: 0 };
// None of the following lines of code will throw compiler errors.
// Using `any` disables all further type checking, and it is assumed
// you know the environment better than TypeScript.
obj.foo();
obj();
obj.bar = 100;
obj = 'hello';
const n: number = obj;

object

要定义对象类型,我们只需列出其属性及其类型。

例如,下面是一个接收坐标对象的函数:

ts
// The parameter's type annotation is an object type
function printCoord(pt: { x: number; y: number }) {
  console.log("The coordinate's x value is " + pt.x);
  console.log("The coordinate's y value is " + pt.y);
}

printCoord({ x: 3, y: 7 });

unknown

unknown 是 any 的类型安全对应方。任何类型都可以赋值给 unknown,但如果没有类型断言或基于控制流的缩小,unknown 除了赋值给自身和 any 之外,不能赋值给任何其他类型。同样,如果不先断言或缩小到一个更具体的类型,就不允许对 unknown 进行任何操作。

ts
function f1(a: any) {
  a.b(); // OK
}

function f2(a: unknown) {
  // Error: Property 'b' does not exist on type 'unknown'.
  a.b();
}

never

never 类型表示从不出现的值类型。例如,never 是函数表达式或箭头函数表达式的返回类型,它总是抛出异常或从不返回。当变量被任何永远不会为真的类型保护缩小范围时,也会获得 never 类型。

never 类型是每种类型的子类型,可以赋值给每种类型;但是,没有任何类型是 never 的子类型,也不能赋值给 never(除了 never 本身)。甚至 any 也不能赋值给 never

返回 never 的函数示例

ts
// Function returning never must not have a reachable end point
function error(message: string): never {
  throw new Error(message);
}

// Inferred return type is never
function fail() {
  return error('Something failed');
}

// Function returning never must not have a reachable end point
function infiniteLoop(): never {
  while (true) {}
}