在TypeScript中,对象返回两种类型的并集,但会生成错误。
这是主要方法:
public getSelected(): ISimpleListItem | { [key: string]: ISimpleListItem } {
if (this.multiSelect) // true of false
return this.m_metadata; // metadata is when MANY ISimpleListItem returned
// single ISimpleItem returned
for (let v in this.m_metadata) {
if (this.m_metadata[v].selected == true)
return this.m_metadata[v];
}
}
```
注意它既可以返回单个ISimpleListItem,也可以返回持有MANY ISimpleListItem的对象文字
界面:
export interface ISimpleListItem {
item: any,
index: number,
selected: boolean
}
在这种情况下使用simpleList.getSelected()的方法只接收一个ISimpleList项
private onSelecting(event) {
var orderSelected:ISimpleListItem = this.simpleList.getSelected();
this.selectedAdnetPackageModel = orderSelected.item;
}
你可以在这里看到来源:
https://github.com/born2net/studioDashboard/blob/master/src/comps/app1/adnet/network/
然而错误仍然存在:
答案 0 :(得分:1)
如果我理解你的话:
let myObject: { [key: string]: ISimpleListItem } = {
"key1": {
index: 1,
item: "something",
selected: true
}
};
联合类型是它自己的一种类型,你不能把它看作是联合中的一种类型而不让编译器知道你引用的类型。
有几种方法可以做到这一点:
function getit(): string | { [key: string]: string } {
return null;
}
let a = getit();
console.log(a.length); // error: Property length does not exist on type 'string | { [key: string]: string; }
console.log((a as string).length); // ok
(2)Type guards
if (typeof a === "string") {
console.log(a); // ok
}