我有如下所示的props类型
interface Props {
resource: string;
create?: boolean;
route?: string;
}
如上所示,create 和 route 是可选的 props。但是,我想实现这样的类型,如果存在 create prop,则现在必须需要 route。任何人有任何想法如何做到这一点?
我有如下所示的props类型
interface Props {
resource: string;
create?: boolean;
route?: string;
}
如上所示,create 和 route 是可选的 props。但是,我想实现这样的类型,如果存在 create prop,则现在必须需要 route。任何人有任何想法如何做到这一点?
您应该将这些props分组并将该分组props设为可选
interface RouteProps{
create: boolean;
route: string;
}
interface Props {
resource: string;
routeInfo?: RouteProps;
}
虽然我更喜欢 @DevLoverUmar 的解决方案。你实际上可以选择用typescript做这样的事情:
这可能就是你要找的。但是您必须明确设置TArgs<true>
type TArgs<T extends boolean> = {
a: T,
b: string,
c: T extends true ? string : null
}
工厂函数的外观示例:
type TArgs<T extends true | false> = {
a: T,
c?: T extends true ? string : null
}
const argsFactory = <T extends boolean>(a: T, c: T extends true ? string : null): TArgs<T> => {
return {
a,
c
}
}
// Works
argsFactory(true, "string");
argsFactory(false, null);
// Doesnt Work
argsFactory(false, "some String");
argsFactory(true, null)
您可以将其拆分为两种类型的联合并create
与文字类型一起使用:
type Props = {
resource: string;
create?: false;
route?: string
} | {
resource: string;
create: true;
route: string;
}