已编辑:更改ID类型
我有一个具有以下值的数组
const ids: number[] = [45, 56];
const obj: any = {
45: "HELLO",
56: "WORLD",
};
我想输入对象的当前any
类型以将其限制为我的ids
数组值。
我尝试使用查找类型,但未成功…
有什么想法吗?
致谢
答案 0 :(得分:1)
您可以使用Record
映射类型。您还需要使用const
断言来捕获数组元素的文字类型:
const ids = [45, 56] as const;
const obj: Record<typeof ids[number], string> = {
45: "HELLO",
56: "WORLD",
};
const obj2: Record<typeof ids[number], string> = {
45: "HELLO",
56: "WORLD",
57: "WORLD", // error
};
答案 1 :(得分:0)
如果您需要创建一个函数,该函数返回一个类型可检查的对象,其键对应于数组:
function indexKeys<K extends string>(keys: readonly K[]) {
type Result = Record<K, number>;
const result: Result = {} as Result;
const {length} = keys;
for (let i = 0; i < length; i++) {
const k = keys[i];
result[k] = i;
}
return result;
};
这里类型检查器会抱怨:
// Property 'zz' does not exist on type 'Result'.
const {aa, zz} = indexKeys(['aa', 'bb']);