3 回答

TA贡献1887条经验 获得超5个赞
您应该对这些道具进行分组,并将分组的道具设为可选
interface RouteProps{
create: boolean;
route: string;
}
interface Props {
resource: string;
routeInfo?: RouteProps;
}

TA贡献1846条经验 获得超7个赞
您可以将其拆分为两种类型的联合并create与文字类型一起使用:
type Props = {
resource: string;
create?: false;
route?: string
} | {
resource: string;
create: true;
route: string;
}

TA贡献1865条经验 获得超7个赞
实际上,您可以选择使用打字稿执行类似的操作:
这可能就是您正在寻找的。但你必须明确设置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)
添加回答
举报