【发布时间】:2018-06-01 02:30:42
【问题描述】:
我有一个异步加载数据的 JavaScript 类,但我想从
interface Header {
id: number;
name: string;
}
class RecordWithHeader {
header: PossiblyUninitialized<Header> = {};
constructor(private dataService) { }
loadData() {
this.dataService.getHeader()
.then((header: Header) => this.header = header);
}
print() {
// want to print possibly undefined value without checking if initialized
console.log('The id is', this.header.id);
}
}
我尝试了几种方法来定义PossiblyUninitialized,但不使用任何方法都无法让访问器工作。
尝试1:地图键
type PossiblyUninitialized<T> = T | { [key in keyof T]: undefined };
类型“{}”不可分配给类型“PossiblyUninitialized”。
类型 '{}' 不能分配给类型 '{ id: undefined;名称:未定义; }'。
类型“{}”中缺少属性“id”。
尝试将空对象分配给属性时会引发错误。这与this keyof question有关。
尝试 2:基本地图
type PossiblyUninitialized<T> = T | { [key: string]: undefined };
“PossiblyUninitialized”类型上不存在属性“id”。
类型 '{ [key: string]: undefined; 上不存在属性 'id' }'。
type PossiblyUninitialized<T> = T | { [key: string]: any };
“PossiblyUninitialized”类型上不存在属性“id”。
类型 '{ [key: string]: any; 上不存在属性 'id' }'。
这是尝试使用没有keyof 限制的更简单的地图。但是 TypeScript 不喜欢属性访问器。
注意:这适用于console.log('ID', this.header['id']),但这不是我想要做的。
【问题讨论】:
标签: typescript