gpt4 book ai didi

typescript - 如何根据数组项的某些键定义新类型?

转载 作者:搜寻专家 更新时间:2023-10-30 21:34:45 25 4
gpt4 key购买 nike

已经有一个const,也就是一个数组:

const fieldTypes = [
{ id: 1, name: 'text'},
{ id: 2, name: 'list'},
// ...
{ id: 10, name: 'switch'}
]

我想定义一个基于const fieldTypes

的新类型
type IdToNamesType = ???

IdToNamesType 的真正定义应该类似于:

type IdToNamesType = {
1: 'text',
2: 'list',
// ...
10: 'switch'
}

有可能吗?

最佳答案

要解决的第一个问题是确保 idname 被推断为数字和字符串文字类型,而不是 number字符串。为此,我们可以使用此功能:

function fields<TId extends number, TName extends string, T extends { id: TId, name: TName }[]>(...o:T):T {
return o;
}
const fieldTypes = fields(
{ id: 1, name: 'text'},
{ id: 2, name: 'list'},
{ id: 10, name: 'switch'}
);
/*
typeof fieldTypes = [{
id: 1;
name: "text";
}, {
id: 2;
name: "list";
}, {
id: 10;
name: "switch";
}]

*/

现在我们可以使用映射类型将元组类型转换为对象类型:

type IdToNamesType = { 
[P in typeof fieldTypes[number]['id']] : Extract<typeof fieldTypes[number], { id: P }>['name']
}

关于typescript - 如何根据数组项的某些键定义新类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53394285/

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