Почему в Typescript выдает ошибку при определении выходного типа?
export function keys<T extends object>(obj: T): (keyof T)[] {
const currentKeys: string[] = [];
for (let key in obj) {
if (obj.hasOwnProperty(key)) currentKeys.push(key);
}
return currentKeys;
}
Выдает ошибку:
Type 'string[]' is not assignable to type '(keyof T)[]'. Type 'string' is not assignable to type 'keyof T'. Type 'string' is not assignable to type 'never'
Нужно чтобы на выходе был массив из ключей этого объекта, и хоть ключи и строки всегда, нужно проверить что такой ключ вобще есть в объекте
Ответы (2 шт):
Автор решения: smellyshovel
→ Ссылка
<T extends object>
Эта запись еще не гарантирует, что ключи объекта будут строковыми. Замените на <T extends Record<string, unknown>>.
Тип Record<string, ...> даст понять, что ожидается на вход объект, в котором ключи гарантированно будут строковыми.
Автор решения: Grundy
→ Ссылка
Нужно изменить тип возвращаемой переменной.
const currentKeys: string[] = [];
Так как возвращаются ключи объекта этот тип и надо указать
const currentKeys: (keyof T)[] = [];