在typescript中使用联合类型时,属性不存在
假设我有两个接口:在typescript中使用联合类型时,属性不存在,typescript,union-types,Typescript,Union Types,假设我有两个接口: interface Box { x: number y: number } 及 就这个问题而言,假设我不能更改接口 现在,在构造对象时,我有如下代码: let a: Box|ColouredBox = {x: 1, y: 2} if( something ){ a.colour = "Blue" // Compilation Error } 我在a.color=“Blue”上遇到此错误: 为什么??这是TS编译器的限制吗?除了完全重建对象之外,我
interface Box {
x: number
y: number
}
及
就这个问题而言,假设我不能更改接口
现在,在构造对象时,我有如下代码:
let a: Box|ColouredBox = {x: 1, y: 2}
if( something ){
a.colour = "Blue" // Compilation Error
}
我在a.color=“Blue”
上遇到此错误:
为什么??这是TS编译器的限制吗?除了完全重建对象之外,我还可以使用其他工作流吗 您可以使用:
这将根据属性color
的存在而缩小到联合部件彩色框
。通常,如果之前未缩小,则只能选择Box | coloredbox
的所有公共属性x
/y
您可以使用:
这将根据属性color
的存在而缩小到联合部件彩色框
。通常,如果之前未缩小,则只能选择Box | coloredbox
的所有公共属性x
/y
使用部分 您可以尝试使用
设a:Partial={x:1,y:2}
该部分将彩色框的所有属性设置为可选
活生生的例子
更新:
消除接口
如果只希望界面的颜色部分是可选的,则可以删除其中一个界面
接口盒{
x:数字;
y:数字;
颜色?:字符串;
}
然后,要确定您是否正在处理彩色框:
if (box.color) { ... }
类型断言
如果您坚持使用这两种接口,则可以使用as
关键字(又称类型断言)将a
具体视为彩色框
设a:Box | coloredbox={x:1,y:2};
(a为彩色框)。color=“蓝色”;
使用部分
您可以尝试使用
设a:Partial={x:1,y:2}
该部分将彩色框的所有属性设置为可选
活生生的例子
更新:
消除接口
如果只希望界面的颜色部分是可选的,则可以删除其中一个界面
接口盒{
x:数字;
y:数字;
颜色?:字符串;
}
然后,要确定您是否正在处理彩色框:
if (box.color) { ... }
类型断言
如果您坚持使用这两种接口,则可以使用as
关键字(又称类型断言)将a
具体视为彩色框
设a:Box | coloredbox={x:1,y:2};
(a为彩色框)。color=“蓝色”;
您的初衷是什么?从类型的角度来看,代码目前没有什么意义:如果它应该具有color
属性,那么它应该是类型的一部分。如果不是-你不应该设定它。你的初衷是什么?从类型的角度来看,代码目前没有什么意义:如果它应该具有color
属性,那么它应该是类型的一部分。如果没有-你不应该设置它。它显著地改变了语义:现在你可以做a.x=undefined
选择这个作为最佳答案是因为类型断言部分。它显著改变了语义:现在你可以做a.x=undefined代码>选择此作为最佳答案,因为类型断言
部分。如果(某物)
是检查是否应设置,而不是是否已设置。如果(某物)
是检查是否应设置,而不是是否已设置。
if ("colour" in a) {
a.colour = "Blue" // works
}
if (box.color) { ... }