以下有什么区别?我有时会在打字稿中看到is
关键字,但在这种情况下无法弄清楚使用arg is string
的好处。查找了但没有太多有关它的信息。有人可以解释吗?
const isString = (arg: any): arg is string => typeof arg === "string";
const isString = (arg: any) => typeof arg === "string";
答案 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
。