我正在尝试为具有基本属性和“一个或另一个”属性的对象创建类型。我尝试使用 union 和 intersection 类型来实现此目的,但是我的知识有限,而且似乎无法弄清楚。
我希望Flow可以看到第一个属性,并推断不应允许另一个属性(当前,我什至无法获得允许任何一个的流)。
我的尝试
.affix-box {
position: absolute;
width: 200px;
height: 100px;
background-color: green;
-webkit-transform: translate(-50%, -50%);
-moz-transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%);
-o-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
答案 0 :(得分:0)
在Flow中,当前默认情况下对象是不精确的(尽管团队已经表明这种行为可以改变)。这意味着打字
const teacher: Teacher = {
name: 'Alexa',
age: 41,
teacherId: 2,
studentId: 3
}
完全有效,因为它具有三个必需的属性name
,age
和teacherId
。有关更多信息,请参见width subtyping。
要让Flow针对其他属性发出警告,您将需要使用精确的对象(用{| ... |}
表示)。 Flow现在会抱怨同时使用studentId
和teacherId
。
type Base = {|
name: string,
age: number
|}
type Teacher = {|
...Base,
teacherId: number,
|}
type Student = {|
...Base,
studentId: number
|}
type Person = Student | Teacher;
const person: Person = {
name: "John",
age: 20,
studentId: 000,
teacherId: 111
} // Fails