【发布时间】:2021-04-23 01:20:17
【问题描述】:
我最近一直在摆弄泛型类型,在编写一个函数时,我必须使用函数中的一个参数来确定返回类型。
为了给出一个总体思路,这里或多或少是我想做的事情:
const getString = () => 'string';
const getNumber = () => 9999;
const getNumberOrString =
<
T extends 'number' | 'string',
ReturnType extends T extends 'number' ? number : T extends 'string' ? string : void
>(which: T): ReturnType => {
switch (which) {
case 'number':
return getNumber();
case 'string':
return getString();
default:
return;
}
};
在 Typescript Playground 上运行上述代码时,我遇到以下错误消息:
类型“数字”不可分配给类型“ReturnType”。 “number”可分配给“ReturnType”类型的约束,但“ReturnType”可以用约束“string |”的不同子类型来实例化。号码'。(2322)
类型“字符串”不可分配给类型“ReturnType”。 “string”可分配给“ReturnType”类型的约束,但“ReturnType”可以用约束“string |”的不同子类型来实例化。号码'。(2322)
类型“未定义”不可分配给类型“ReturnType”。 'ReturnType' 可以用与 'undefined' 无关的任意类型实例化。(2322)
我可以让这段代码在没有任何错误的情况下运行的唯一方法是将返回语句类型转换为any,但是有没有其他方法可以做到这一点而不必求助于类型转换?
【问题讨论】:
-
您好!感谢您的贡献。供日后参考,请don't post error messages as screenshots。我刚刚提交了一个修改,将您的屏幕截图更改为错误消息的实际文本内容。
-
谢谢,下次我会记住的。
标签: typescript