首页 > 解决方案 > Typescript如何声明一个返回最低公分母类型的函数?

问题描述

我想声明一个返回通用类型或其扩展类型的函数

interface Common {
  id: number;
}

interface AdditionalInformation extends Common {
  myname: string;
}

该函数肯定会返回一个包含id属性的对象

并希望它也可以返回myname属性

我试图这样声明函数:

export class Lib {

  public static lowestCommonDenominator <T extends Common>(): Common {
    const a: Common = { id: 1 };
    return a;
  }

  public static firstCaseFunction(): Common {
    const ok: Common = this.lowestCommonDenominator();
    return ok;
  }

  public static secondCaseFunction(): AdditionalInformation {
    // Property 'myname' is missing in type 'Common' but required in type 'AdditionalInformation'.ts(2741)
    const ko: AdditionalInformation = this.lowestCommonDenominator();
    return ko;
  }

}

但是当我将函数分配给扩展类型时,我得到了错误:

“Common”类型中缺少属性“myname”,但在“AdditionalInformation”类型中是必需的。ts(2741)

是否有可能实现我想要的?

标签: typescript2.0declare

解决方案


此代码段删除了错误

export class Lib {
  public static lowestCommonDenominator <T extends Common>(): T {
    const a: Common = { id: 1 };
    return a as T;
  }

  public static firstCaseFunction(): Common {
    const ok: Common = this.lowestCommonDenominator();
    return ok;
  }

  public static secondCaseFunction(): AdditionalInformation {
     const ko: AdditionalInformation = this.lowestCommonDenominator<AdditionalInformation>();
    return ko;
  }
}

推荐阅读