跳到主要内容

类型断言

将 unknown 类型断言到一个具体的类型:

let unknownVar: unknown;

(unknownVar as { foo: () => {} }).foo();

as 到 any 跳过所有的类型检查:

const str: string = "Tom";

(str as any).func().foo().prop;

联合类型中断言一个具体的分支:

function foo(union: string | number) {
if ((union as string).includes("TOM")) { }

if ((union as number).toFixed() === '12') { }
}

双重断言

const str: string = "linbudu";

// 从 X 类型 到 Y 类型的断言可能是错误的,blabla
(str as { handler: () => {} }).handler()
const str: string = "linbudu";

(str as unknown as { handler: () => {} }).handler();

// 使用尖括号断言
(<{ handler: () => {} }>(<unknown>str)).handler();

非空断言

foo.func!().prop!.toFixed();

类型守卫

// 类型控制流分析做不到跨函数上下文来进行类型的信息收集
function isString(input: unknown): input is string {
return typeof input === 'string';
}

function foo(input: string | number) {
if (isString(input)) {
input.replace('linbudu', 'linbudu599');
}
if (typeof input === 'number') {
}
// ...
}