gpt4 book ai didi

Typescript Record 其中对象 "id"属性等于 Key

转载 作者:行者123 更新时间:2023-12-02 18:27:22 24 4
gpt4 key购买 nike

我正在尝试制作这种形状的记录,其中 id 属性等于每个对象条目的键:

{
id_1: {
id: 'id_1',
date: 1234
comment: 'blah'
},
id_2: {
id: 'id_2',
date: 5678,
comment: 'boo'
}
}

这是我到目前为止的想法:

export type TMap<T extends string> = {
[P in T]: { _id: P; date: number; comment: string };
};

但是,当我使用它时,我需要像这样传入一个参数:

const myMap: TMap<string> = {...}

是否有更简单的方法来实现键等于值的属性之一的记录?

最佳答案

我不确定是否可以让编译器仅使用不带泛型的注释来推断您想要的内容,但您可以使用函数式方法:

TS Playground link

function validMap <T extends {
[K in keyof T]: K extends string ? {
id: K;
date: number;
comment: string;
} : never;
}> (value: T): T {
return value;
}

const map1 = validMap({
a: {
id: 'a',
date: 1,
comment: 'hello',
},
b: {
id: 'b',
date: 2,
comment: 'world',
},
});

const map2 = validMap({
a: {
id: 'a',
date: 1,
comment: 'hello',
},
b: {
id: 'a',
// ^^
// Type '"a"' is not assignable to type '"b"'.(2322)
date: 1,
comment: 'hello',
},
});

关于Typescript Record<Key, object> 其中对象 "id"属性等于 Key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69936751/

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