typescript - 函数返回类型取决于作为参数的 keyof 接口
问题描述
我有一个函数getThing
,它的第一个参数应该是类的小写名称,返回类型是类本身的实例或null
. 它还有第二个参数用于“搜索”其中的类(内部代码,这里不重要)。
例如,如果我这样做getThing('user', "the content")
,它应该返回我User | null
但是我找不到如何做到这一点,所以现在我对每个可能的输入都有一个重载,但是阅读起来很长而且很复杂,所以我问是否有更好的方法来做到这一点?
现在,我有这样的东西,但它根本不起作用:
interface Type {
channel: Channel;
command: Command;
emote: Emoji;
guild: Guild;
member: GuildMember;
message: Message;
role: Role;
user: User;
};
async function getThing<T extends keyof Type>(datatype: T, content: string | Message): Promise<Type[typeof datatype] | null> {
switch (dataType) {
case 'channel':
return new Channel();
case 'command':
return new Command();
case 'emote':
return new Emoji();
case 'member':
return new GuildMember();
case 'message':
return new Message();
case 'role':
return new Role();
case 'user':
return new User();
}
}
async () => {
const test = await getThing('command', 'test');
};
当悬停在“测试”上时,它说Channel | null
哪个是正确的,但是在函数中所有new Something()
都是错误的,因为 TypeScript 正在等待Channel & Command & Emoji & Guild & GuildMember & Message & Role & User
,这不是我想要的:/
解决方案
推荐阅读
- r - 将数据帧转换为 arima 的时间序列
- angular - 获取 POST : 400 角度错误请求
- angular - 没有从服务 Angular 8 中获取更新的值
- spring-boot - spring boot 连接阿里巴巴 e-mapreduce kafka
- rest - 如何通过 bitbucket REST api 1.0 从所有分支获取所有提交?
- c# - .Net Nuget 包安装重新返回 ssl 错误
- aix - IBM PL/I:使用固定变量
- c++ - 如何在 qt 中包含菜单项的工具提示
- python - 我想在办公室找到一天中最忙的时间
- azure-storage - 在 Azure 存储上创建 PDF 后写入 PDF 文件内容