gpt4 book ai didi

Typescript - 数组的keyof值

转载 作者:行者123 更新时间:2023-12-01 21:46:58 27 4
gpt4 key购买 nike

我有一个 list

export const list = [
{
name: 'parentTitle',
},
{
name: 'anotherTitle',
},
{
name: 'whatever',
},
];

现在我想动态创建一个描述以下内容的联合类型:

type Title = 'parentTitle' | 'anotherTitle' | 'whatever';

有办法吗?

我试着在这里调整这个想法:Keyof nested child objects但是我想不出来

最佳答案

list 的类型在您的示例中,编译器将其推断为 Array<{name: string}> ,因此编译器完全忘记了特定的 string literal typesname尝试定义 Title 时的属性.

您必须更改分配 list 的方式,至少在某种程度上。最简单的事情(可能会或可能不会满足您的需求)是使用 const assertion ,它要求编译器推断可能的最窄类型:

export const list = [
{ name: 'parentTitle', },
{ name: 'anotherTitle', },
{ name: 'whatever', },
] as const;

现在list被推断为类型:

/* 
const list: readonly [
{ readonly name: "parentTitle";},
{ readonly name: "anotherTitle";},
{ readonly name: "whatever";}
]
*/

这是只读对象的只读元组,具有特定的 name特定顺序的属性。由此我们可以使用 lookup types定义 Title :

type Title = typeof list[number]["name"];
// type Title = "parentTitle" | "anotherTitle" | "whatever"

好的,希望对你有帮助;祝你好运!

Playground link to code

关于Typescript - 数组的keyof值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60310405/

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