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

时间:2019-09-12 10:04:57

标签: 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";

1 个答案:

答案 0 :(得分:3)

那是user-defined type guard。这意味着在调用isString时,TypeScript知道如果返回string,则将类型缩小到true

一个例子:

declare const foo: string | number;
if (isString(foo)) {
    console.log(foo.toLowerCase());
}

如果函数未定义自定义类型防护,则if块内的类型仍为string | number,调用toLowerCase()会产生错误。

使用类型保护,编译器将类型缩小到if块内的string

Playground