错误 2339 与 ||和联合类型
Error 2339 With || and Union Types
我创建了一个示例代码块,它显示了 TypeScript 中的语法错误,但运行正常 JavaScript:TypeScript Sandbox
基本上,当我尝试使用 ||
(OR
) 运算符来拼接一个可能是 undefined
的对象 属性 TypeScript 时,它说属性 不存在,我知道这也是我使用 ||
.
的原因
class Person {
name: string;
job: string;
}
var person1:Person = {name: 'hi', job: 'yes'};
var name = 'bye';
function showName(person1:Person | string ) {
var personsName: string = person1.name || person1;
document.write(personsName);
document.write('<br />');
}
showName(person1);
showName(name);
输出完全符合我的预期:
hi
bye
但是,TypeScript 在 person1.name 上显示语法错误。为什么?执行此操作的正确 TypeScript 方法是什么?
您需要在表达式中断言类型,因为操作数是联合类型。即
var personsName: string = (<Person>person1).name || <string>person1;
我推荐使用 type guard:
function showName(person1: Person | string) {
var personsName = (typeof person1 === "string") ? person1 : person1.name;
document.write(personsName);
document.write('<br />');
}
请注意,当 person1
为 null || undefined
时,此代码将引发错误,但原始代码也是如此。有很多不同的方法来处理这个问题,所以我会把它留给你。
我创建了一个示例代码块,它显示了 TypeScript 中的语法错误,但运行正常 JavaScript:TypeScript Sandbox
基本上,当我尝试使用 ||
(OR
) 运算符来拼接一个可能是 undefined
的对象 属性 TypeScript 时,它说属性 不存在,我知道这也是我使用 ||
.
class Person {
name: string;
job: string;
}
var person1:Person = {name: 'hi', job: 'yes'};
var name = 'bye';
function showName(person1:Person | string ) {
var personsName: string = person1.name || person1;
document.write(personsName);
document.write('<br />');
}
showName(person1);
showName(name);
输出完全符合我的预期:
hi
bye
但是,TypeScript 在 person1.name 上显示语法错误。为什么?执行此操作的正确 TypeScript 方法是什么?
您需要在表达式中断言类型,因为操作数是联合类型。即
var personsName: string = (<Person>person1).name || <string>person1;
我推荐使用 type guard:
function showName(person1: Person | string) {
var personsName = (typeof person1 === "string") ? person1 : person1.name;
document.write(personsName);
document.write('<br />');
}
请注意,当 person1
为 null || undefined
时,此代码将引发错误,但原始代码也是如此。有很多不同的方法来处理这个问题,所以我会把它留给你。