Pat*_*iak 2 union types dynamic typescript
我有一个清单
export const list = [
{
name: 'parentTitle',
},
{
name: 'anotherTitle',
},
{
name: 'whatever',
},
];
Run Code Online (Sandbox Code Playgroud)
现在我想动态创建一个联合类型,它描述以下内容:
type Title = 'parentTitle' | 'anotherTitle' | 'whatever';
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
我尝试在这里调整这个想法:Keyofnestedchildobjects 但我无法弄清楚
您的示例中的类型list被编译器推断为,因此当您尝试定义时,Array<{name: string}>编译器已经完全忘记了属性的特定字符串文字类型。nameTitle
你必须改变你的分配方式list,至少在某种程度上。最简单的事情(可能满足也可能不满足您的需求)是使用断言const,它要求编译器推断可能的最窄类型:
export const list = [
{ name: 'parentTitle', },
{ name: 'anotherTitle', },
{ name: 'whatever', },
] as const;
Run Code Online (Sandbox Code Playgroud)
现在list推断为以下类型:
/*
const list: readonly [
{ readonly name: "parentTitle";},
{ readonly name: "anotherTitle";},
{ readonly name: "whatever";}
]
*/
Run Code Online (Sandbox Code Playgroud)
这是一个只读对象的只读元组,具有name特定顺序的特定属性。由此我们可以使用查找类型来定义Title:
type Title = typeof list[number]["name"];
// type Title = "parentTitle" | "anotherTitle" | "whatever"
Run Code Online (Sandbox Code Playgroud)
好的,希望有帮助;祝你好运!
| 归档时间: |
|
| 查看次数: |
5581 次 |
| 最近记录: |