Type Guard в TypeScript
В чем причина такого поведения ?
const dataObject: {[key: string] : {[k: string]: string | null}} = {
user: {
name: 'ivan',
surname: 'ivanov',
}
}
const u: string = 'user'
const n: string = 'name'
const keys: string[] = ['name', 'surname']
for (const property in dataObject[u]) {
let diff: string = 'null'
if (dataObject[u][property] !== null) {
diff = dataObject[u][property] //Type 'string | null' is not assignable to type 'string'.Type 'null' is not assignable to type 'string'
console.log(diff)
}
}
let diff: string = 'null'
if (dataObject[u][n] !== null) {
diff = dataObject[u][n] // Работает корректно
console.log(diff)
}
Для diff = dataObject[u][property]
можно воспользоваться !
и ошибка уйдет.
Но хотелось бы узнать, можно ли решить это без !
и почему такое поведение ?
Источник: Stack Overflow на русском