Action
应该具有属性children
,size?
和variant?
。
Action
也应实现Button
或Link
中的一个。
我该如何实现?
这是我的最佳尝试
interface Button {
action: () => void;
href?: never;
}
interface Link {
href: string;
action?: never;
}
interface Action extends Button | Link {
children: string;
size?: 'large' | 'small';
variant?: 'secondary';
}
错误:
[tslint] Forbidden bitwise operation
我真正具有的功能要求是我要创建一个类型或接口,该类型或接口具有一些道具加上action
或href
,但不能同时包含action
和{{1} }。
答案 0 :(得分:1)
不幸的是,接口无法扩展联合类型。您可以改用交叉点类型:
interface Button {
action: () => void;
href?: never;
}
interface Link {
href: string;
action?: never;
}
type Action = (Button | Link) & {
children: string;
size?: 'large' | 'small';
variant?: 'secondary';
}
let a: Action = {
href: "",
children: "",
size: "large"
}
let a2: Action = {
action: () => { },
children: "",
size: "large"
}
let a3: Action = { // error
href: ""
action: () => { },
children: "",
size: "large"
}