typescript2.0 - 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)
是否有可能实现我想要的?
解决方案
此代码段删除了错误
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;
}
}
推荐阅读
- c++ - 在 C++ 中创建对象时出现段错误
- android - 在android上以编程方式获取来电号码
- java - mondoDB Java 查询
- java - 如何在 Java 中将 String 转换为 DataInputStream 类型?
- javascript - 在循环中从文本数组中对 HTML textarea 内容进行分页
- ios - 使用无密码类型崩溃应用程序的 Firebase 身份验证
- python - 将 djongo 用于 django 2.1.5 和 mongodb 4 的问题
- machine-learning - NLP 预训练模型(例如 ELMo、Bert)的数据预处理
- python - 在 bs4 中定位元素
- opengl - glGenBuffers 返回零表示什么?