foo = (p: string = 'aaa, bbb') => {
const str = p.split(',').map((prop: keyof typeof pos) => {...})
}
Types of parameters 'prop' and 'value' are incompatible. Что не так пишу?
const pos = { aaa: '...', bbb: '...', } const foo = (p: string = 'aaa, bbb') => { const str = p.split(',').map((prop: keyof typeof pos) => pos[prop.trim()]); return str; }
Потому что тип твоего пропа в коллбэке map совсем не keyof typeof pos. А на самом деле просто string, который автовывод корректно отображает без твоего харкдода. foo('ccc, ddd')
.map((prop: string) => { if(prop in pos) { return pos[prop]; } }); так тож не работает
Потому что такое сужение не работает в ts. Наличие поля в объекте не гарантирует соответствие типу.
Объясню почему не сужает. Потому что в ts ты можешь описать только часть полей на типах, остальные будут существовать в рантайме и твоя проверка будет выдавать ложный значения иногда.
Обсуждают сегодня