gpt4 book ai didi

Typescript — 确保对象 prop 键与 prop 值相同

转载 作者:行者123 更新时间:2023-12-04 01:26:28 25 4
gpt4 key购买 nike

我需要键入以下对象结构:

const entities = {
abc: {
id: 'abc'
},
def: {
id: 'def'
}
}

每个对象 prop key 需要与其对应的 id 匹配。


我试过这样做:

interface EntitiesMap<E extends Entity> {
[K in E['id']]: E;
}

interface Entity {
id: string;
}

但这并不能确保 prop 键和 id 值匹配。例如:

const entities = {
ghi: {
id: 'aaaaa' // should throw an error as ghi doesn't match aaaaa
}
}

我有什么想法可以让这项工作成功吗?

最佳答案

我知道的方法是定义一个类型。但是您需要始终关心 key 。

type Entity<T extends keyof any> = {
[K in T]: {
id: K;
};
};

const entities: Entity<'abc' | 'def' | 'def2' | 'def3'> = {
abc: {
id: 'abc'
},
def: {
id: 'def'
},
def2: {
id: 'abc' // <- fails
},
def3: {
id: 'def4' // <- fails
},
}

对于按键你可以有一个辅助函数,不确定是否可以接受

const validateEntities = <K extends keyof any>(value: Entity<K>): Entity<K> => {
return value;
};

const entities = validateEntities({
abc: {
id: 'abc'
},
def: {
id: 'def'
},
def2: {
id: 'abc' // <- fails
},
def3: {
id: 'def4' // <- fails
},
});

关于Typescript — 确保对象 prop 键与 prop 值相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61848518/

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