typescript - Användardefinierade typvakter fungerar inte med `any`-typ?


Om jag skriver en användardefinierad typvakt som följande:

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 kan ta reda på typen av x inom if-blocket ovan.

Men om jag ändrar koden till:

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

Typescript antar att x är any, även inom "säkerheten" av ett typvakt if-uttalande.

Svar #1

Verifierad bugg. Redan rapporterad här: https://github.com/Microsoft/TypeScript/issues/6015