【发布时间】:2021-08-23 11:59:41
【问题描述】:
我想获取一个常量对象,比如{key1: 'value1', key2: value2'} as const,并将其值转换为键,并在类型为{value1: number; value2: number} 的新对象中使用它。我想在函数中执行此操作,并且希望正确键入函数。
下面是我尝试开始工作的代码。当我尝试将Partial<Blah> 类型的变量转换为Blah 时,就会发生错误。有人可以解释为什么会发生这种情况,以及是否有办法做我想做的事情?谢谢!
type BaseObject = Record<string, string>;
type ValuesAsKeys<T extends BaseObject> = {
[K in keyof T as T[K]]: number;
};
function useValuesAsKeys<T extends BaseObject>(arg: T): ValuesAsKeys<T> {
const x: Partial<ValuesAsKeys<T>> = {};
for (const value of Object.values(arg) as Array<T[keyof T]>) {
x[value] = 1;
}
// This line doesn't work
return x as ValuesAsKeys<T>;
}
// Example use case
const obj = {key1: 'value1', key2: 'value2'} as const;
const result = useValuesAsKeys(obj); // Type of result is {value1: number; value2: number}
// Everything below here works
// Only including this because I'm contrasting this code with the code above.
type KeysAsKeys<T extends BaseObject> = {
[K in keyof T]: number;
};
function useKeysAsKeys<T extends BaseObject>(arg: T): KeysAsKeys<T> {
const x: Partial<KeysAsKeys<T>> = {};
for (const value of Object.values(arg) as Array<T[keyof T]>) {
x[value] = 1;
}
return x as KeysAsKeys<T>;
}
【问题讨论】:
标签: typescript generics types partial