我希望能够输入 prop 作为索引签名对象或只是数字。重现此问题的代码示例:
interface ITest {
prop?: { [key: string]: number } | number
}
const obj: ITest = {}
// Property 'test' does not exist on type 'number | { [key: string]: number; }'.
console.log(obj.prop.test)
答案 0 :(得分:0)
您正在使用obj或原始类型或未定义的属性类型。 同时设置属性很容易。您需要先阅读“ prop”的类型,然后才能读取它,如下面的代码所示。
interface ITest {
prop?: { [key: string]: number } | number
}
//const obj: ITest = { prop: { "age": 22 } };
const obj: ITest = { prop: 55 };
if (typeof obj.prop === 'number') {
console.log(obj.prop);
}
else {
Object.keys(obj.prop).forEach(element => {
console.log(obj.prop[element]);
});
}
根据评论,以下是从上面的ts代码生成的ES2015代码,我看不到您报告的错误,我有什么遗漏吗?
const obj = { prop: { "age": 22 } };
//const obj: ITest = { prop: 55 };
if (typeof obj.prop === 'number') {
console.log(obj.prop);
}
else {
Object.keys(obj.prop).forEach(element => {
console.log(obj.prop[element]);
});
}