Не срабатывает проверка на типы данных
Есть объект с таким типом данных
export type JobType = {
[index: string]: number | string | boolean;
repeat: number;
isWork: boolean;
inQueue: boolean;
jobName: string;
inQueueTime: number;
isRunningTime: number;
}
Есть вот такой вот код:
//jobSettings - объект с типом данных JobType
let value: string | number = '';
if (typeof jobSettings[name] === 'number' || typeof jobSettings[name] === 'string') {
value = jobSettings[name];
}
Выдает ошибку внутри if на переменной value: TS2322: Type 'string | number | boolean' is not assignable to type 'Key'. Type 'boolean' is not assignable to type 'Key'.
Почему, если я проверю тип на string и number, он это игнорирует и сравнивает с типами данных JobType?
Как это исправить?
Далее эта переменная будет подставлена в атрибут value тега <input>
Ответы (1 шт):
Автор решения: Alexey Ten
→ Ссылка
TS не умеет (пока?) сужать типы свойств объектов. Поэтому нужно сначала переложить его в переменную.
export type JobType = {
[index: string]: number | string | boolean;
repeat: number;
isWork: boolean;
inQueue: boolean;
jobName: string;
inQueueTime: number;
isRunningTime: number;
}
//jobSettings - объект с типом данных JobType
declare let jobSettings: JobType;
declare let name: string;
let value: string | number = '';
const v = jobSettings[name];
if (typeof v === 'number' || typeof v === 'string') {
// Тут TS знает что `v` число или строка и присваивание не вызывает ошибки.
value = v;
}