gpt4 book ai didi

typescript - 在 Typescript 中按字符串返回不同的类型

转载 作者:行者123 更新时间:2023-12-03 15:58:05 25 4
gpt4 key购买 nike

鉴于我们有以下两种不同的类型,我们如何根据字符串参数更改函数的返回而不提供泛型类型?

interface Type1 { typeName: string; };
interface Type2 { typeVersion: string; };
type AllTypes = Type1 | Type2;

function returnTypes(t: string): AllTypes {
...
}

const typeResult = returnTypes('type1');
console.log(typeResult.typeName);

这里没有定义返回!

最佳答案

像这样创建一个重载声明

interface Type1 { typeName: string; };
interface Type2 { typeVersion: string; };
type AllTypes = Type1 | Type2;

function returnTypes(t: 'type1'): Type1;
function returnTypes(t: 'type2'): Type2;
function returnTypes(t : 'type1' | 'type2'): AllTypes {
switch (t) {
case "type1": return { typeName: "test" };
case "type2": return { typeVersion: "test" };
}
}

console.log(returnTypes('type1').typeName);
console.log(returnTypes('type2').typeVersion);

请注意,当您以这种方式重载函数时,调用者无法使用实现签名。只有预先指定的声明才构成重载函数的接口(interface)。

更新:修复并完成了示例,以表明 TypeScript 知道它返回的是哪种类型。

关于typescript - 在 Typescript 中按字符串返回不同的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43958889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com