用户定义的类型守卫不能使用“任何”类型?

时间:2016-05-11 04:49:51

标签: types typescript

如果我正在编写用户定义的类型保护,如下所示:

interface Cat {
  meow: () => void;
}

function isCat(a: any): a is Cat {
  return a.name === 'kitty';
}

var x: Cat|{};
if(isCat(x)) {
  x.meow(); // OK, x is Cat in this block
}

Typescript能够找出上面x块中if的类型。

enter image description here

但是,如果我将代码更改为:

var x; // No type here. It's an "any" for now.
if(isCat(x)) {
  x.meow(); // What!? It's type `any`??
}

Typescript假定xany,即使在"安全"类型保护if声明。

enter image description here

1 个答案:

答案 0 :(得分:2)

验证错误。已在此处报告:https://github.com/Microsoft/TypeScript/issues/6015