2
我试图定义一个异步类型守卫。我可以同步做到以下几点:使用Promise的TypeScript异步类型守卫
class Foo {
public type = 'Foo';
}
// Sync type guard:
function isFoo(obj: any): obj is Foo {
return typeof obj.type !== 'undefined' && obj.type === 'Foo';
}
function useFoo(foo: Foo): void {
alert(`It's a Foo!`);
}
const a: object = new Foo();
if (isFoo(a)) useFoo(a);
但我不知道如何做同样的异步。这是我的尝试:
class Bar {
public getType =() => new Promise(resolve => {
setTimeout(() => resolve('Bar'), 1000);
});
}
// Async type guard:
async function isBar(obj: any): Promise<obj is Bar> {
if (typeof obj.getType === 'undefined') return false;
const result = await obj.getType();
return result === 'Bar';
}
function useBar(bar: Bar): void {
alert(`It's a Bar!`);
}
const b: object = new Bar();
isBar(b).then(bIsBar => {
if (bIsBar) useBar(b);
});
任何帮助,将不胜感激!
看起来它不是一个功能呢。也许你可以[提交想法](https://github.com/Microsoft/TypeScript/issues)? – Paleo
当使用tsc 2.0.9和节点7.7.3定位es6时,这似乎工作正常。 –