首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在TypeScript中使用具有接口类型的实例?

如何在TypeScript中使用具有接口类型的实例?
EN

Stack Overflow用户
提问于 2016-02-16 02:26:42
回答 2查看 243关注 0票数 0

考虑以下TypeScript代码:

代码语言:javascript
复制
class A {public name: string = 'A';}
interface B {num: number;}

class Foo {
    get mixed(): Array<A | B> {
        const result = [];
        for (var i = 0; i < 100; i ++) {
            result.push(Math.random() > 0.5 ? new A() : {num: 42});
        }
        return result;
    }

    print(): string {
        return this.mixed.map(item => {
            if (item instanceof A) {
                return item.name;
            }

            return item.num;    
        }).join('\n');
    }
}

print函数中,我需要根据item的类型返回不同的值。对于A类型,使用instanceof很容易,但是对于B,我不能使用instanceof,因为B是一个接口。

TypeScript不明白,在它所说的item.num中,item肯定是B类型,没有必要抱怨。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-16 06:46:40

您可以使用

代码语言:javascript
复制
return (<B>item).num;

向TypeScript编译器提供提示。

票数 1
EN

Stack Overflow用户

发布于 2016-02-16 09:01:49

另外,另一种方法是使用用户定义类型保护函数

所以,你可以有这样的

代码语言:javascript
复制
  class A ...
  interface B ...
  function isB(item: any): item is B {
      return item && 'num' in item;
  }

  class Foo {...
     print(): string {
         return this.mixed.map(item => {
            if (item instanceof A) {
              return item.name;
            } else if(isB(item)){
              return item.num;
            }  
    }).join('\n');
  }..
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35422600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档