当我在tsx中使用交集类型时,它坏了!
官方文件中的示例
function extend<T, U>(first: T, second: U): T & U {
let result = <T & U>{};
for (let id in first) {
(<any>result)[id] = (<any>first)[id];
}
for (let id in second) {
if (!result.hasOwnProperty(id)) {
(<any>result)[id] = (<any>second)[id];
}
}
return result;
}
error: The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.ts(2362)
答案 0 :(得分:1)
问题不在于交叉点类型,而在于用于执行类型断言的语法。使用.tsx
扩展名时,不能将尖括号用于类型声明,因为尖括号被解释为JSX。
代替此:
let result = <T & U>{};
执行此操作:
let result = {} as T & U;
作为旁注:您可以跳过所有断言,并以以下方式实现您的功能:
function extend<T, U>(first: T, second: U): T & U {
return Object.assign({}, first, second);
}