我的 prop 类型如下所示
interface Props { resource: string; create?: boolean; route?: string; }
从上面可以看出,创建和路由是可选的 prop 。但是,我想实现的类型,如果创建 prop 是目前的路线,那么现在必须要求。任何人都有什么想法如何做到这一点?
6uxekuva1#
您应该将这些 prop 分组,并使分组后的 prop 成为可选 prop ,如
interface RouteProps{ create: boolean; route: string; } interface Props { resource: string; routeInfo?: RouteProps; }
oknwwptz2#
可以将其拆分为两种类型的并集,并将create与literal类型一起使用:
create
type Props = { resource: string; create?: false; route?: string } | { resource: string; create: true; route: string; }
rnmwe5a23#
虽然我更喜欢@DevLoverUmar的解决方案。实际上,您可以选择使用typescript做类似这样的事情:这可能就是您要查找的内容。但是您必须显式地设置TArgs<true>
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)
3条答案
按热度按时间6uxekuva1#
您应该将这些 prop 分组,并使分组后的 prop 成为可选 prop ,如
oknwwptz2#
可以将其拆分为两种类型的并集,并将
create
与literal类型一起使用:rnmwe5a23#
虽然我更喜欢@DevLoverUmar的解决方案。实际上,您可以选择使用typescript做类似这样的事情:
这可能就是您要查找的内容。但是您必须显式地设置
TArgs<true>
使用工厂函数时的外观示例: