在 TypeScript 中使用“is”关键字有什么好处?

shi*_*atk 1 javascript typescript typescript-typings

下面有什么区别?我有时会is在打字稿中看到关键字,但无法弄清楚arg is string在这种情况下使用的好处。查了一下,但没有太多相关信息。有人能解释一下吗?

const isString = (arg: any): arg is string  => typeof arg === "string";  

const isString = (arg: any) => typeof arg === "string";
Run Code Online (Sandbox Code Playgroud)

luk*_*ter 5

那是一个用户定义的类型 guard。这意味着在调用isStringTypeScript 时知道将类型缩小到string是否返回true.

一个例子:

declare const foo: string | number;
if (isString(foo)) {
    console.log(foo.toLowerCase());
}
Run Code Online (Sandbox Code Playgroud)

如果函数没有定义自定义类型保护,则 if 块内的类型仍然是string | number,调用toLowerCase()会产生错误。

使用类型保护,编译器将类型缩小到stringif 块内。

操场