mya*_*sev 10 typescript typescript1.4
是否可以创建一个typeguard或其他完成相同目的的东西来检查变量是否是打字稿联合中的特定接口类型?
interface Foo { a:string }
interface Bar { b:string }
(function() {
    function doStuff(thing: Foo | Bar) {
        if(typeof thing === 'Foo') {
            console.log('Foo');
        } 
        else if (typeof thing === 'Bar') {
            console.log('Bar');
        }
        else {
            console.log('unknown');
        }
    }
    var thing: Foo = {a:'a'};
    doStuff(thing);
})();
从Typescript 1.6开始,您可以使用用户定义的类型保护:
let isFoo = (object: Foo| Bar): object is Foo => {
    return "a" in object;
}
请参阅https://www.typescriptlang.org/docs/handbook/advanced-types.html#user-defined-type-guards
typeof不这样做.它总是返回"string","number","boolean","object","function"或"undefined".
您可以使用if(thing.a !== undefined) {或等测试来测试对象属性if(thing.hasOwnProperty('a')) {.
请注意,您可以创建一个既包含字符串a又包含字符串的对象b,因此请注意这种可能性.
| 归档时间: | 
 | 
| 查看次数: | 4943 次 | 
| 最近记录: |