对不起,我的英语,你能告诉我如何描述类型,以便当一个特定的关键是输入,另一个关键是允许输入?
interface Base {
top?: number;
left?: number;
behavior?: "auto" | "smooth"
}
interface OffsetTopProps {
offsetTop?: number;
}
interface OffsetLeftProps {
offsetLeft?: number;
}
// in case when top was filled, we can enter offsetTop?: number; similarly with left
我试过和工会合作,但没用。
type test = Base | OffsetTopProps | OffsetLeftProps
1条答案
按热度按时间eh57zj3b1#
如果你想在
top
不存在的时候强制执行,那么offsetTop
也必须不存在,那么你可以像这样将类型的这一部分表示为一个联合:TypeScript并没有直接的方法来禁止对象类型中的属性键,但是你可以说这个键是一个可选的属性,它的值是不可能的
never
类型。由于没有never
类型的值,因此您可以做的唯一合理的事情就是将属性忽略(或者将其设置为undefined
)。因此,Top
要么有一个number
类型的top
属性和一个number
类型的可选offsetProperty
,要么既没有top
也没有offsetTop
属性。类似地,对于
left
/offsetLeft
对:现在你可以将它们与
Base
组合得到Test
:由于
Test
是Base
、Top
和Left
的交集,因此Test
类型的值必须符合所有三个定义。让我们测试一下:
编译器允许有效值,但拒绝包含
offsetTop
但没有top
或offsetLeft
但没有left
的无效值。Playground链接到代码