我是TypeScript的新手。我正在尝试运行类似的方案,但是它给出了两个错误。我不知道我在这里想念的是什么。谁能帮我解决这个问题?
interface Foo {
[key: string]: number
};
interface Bar {
[key: string]: { positive: number, negative: number }
}
// const obj: Foo | Bar = {
// usa: { positive: 5, negative: 3 },
// uk: { positive: 4, negative: 1 },
// fr: { positive: 8, negative: 2 },
// }
const obj: Foo | Bar = {
usa: 5,
uk: 3,
fr: 2,
}
Object.keys(obj).map(key => {
const val = 'positive' in obj[key] ? obj[key].positive : obj[key];
alert(val);
})
我遇到的两个错误是:
答案 0 :(得分:2)
您可以在此处使用user defined type guards来让编译器知道您的检查应该缩小了类型。但这仅适用于变量,不适用于表达式,因此您必须首先将其分配给单独的变量。
interface Foo {
[key: string]: number
};
interface PosNeg {
positive: number
negative: number
}
interface Bar {
[key: string]: PosNeg
}
type FooBar = Foo | Bar
type PossibleValues = FooBar[keyof FooBar]
function isPosNeg(item: PossibleValues): item is PosNeg {
return typeof item !== "number"
}
const obj: FooBar = {
usa: 5,
uk: 3,
fr: 2,
}
Object.keys(obj).map(key => {
const item = obj[key]
const val = isPosNeg(item) ? item.positive : item;
alert(val)
})