Object.keys
возвращает string[]
.Это сделано так, как описано в этом выпуске
Это сделано намеренно.Типы в TS являются открытыми.Таким образом, keysof, вероятно, будет меньше всех свойств, которые вы получите во время выполнения.
Существует несколько решений, самое простое из которых - просто использовать утверждение типа:
const v = {
a: 1,
b: 2
};
var values = (Object.keys(v) as Array<keyof typeof v>).reduce((accumulator, current) => {
accumulator.push(v[current]);
return accumulator;
}, [] as (typeof v[keyof typeof v])[]);
Youтакже можно создать псевдоним для keys
в Object
, который будет возвращать нужный тип:
export const v = {
a: 1,
b: 2
};
declare global {
interface ObjectConstructor {
typedKeys<T>(o: T) : Array<keyof T>
}
}
Object.typedKeys = Object.keys as any
var values = Object.typedKeys(v).reduce((accumulator, current) => {
accumulator.push(v[current]);
return accumulator;
}, [] as (typeof v[keyof typeof v])[]);