打字稿如何声明返回最低公共分母类型的函数



我要声明一个返回常见类型或其扩展类型

的函数
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;
  }
}

但是,当我将功能分配给扩展类型时,我会得到错误:

属性'myname'在类型的" common"中缺少,但在类型中需要 '额外信息'.ts(2741(

是否可以实施我想要的东西?

此代码段删除错误

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;
  }
}

最新更新