Javascript Typescript-当存在另一个属性时,生成所需的可选属性

Javascript Typescript-当存在另一个属性时,生成所需的可选属性,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,我有如下所示的类型 interface Props { resource: string; create?: boolean; route?: string; } 如上所述,创建和路由是可选的道具。然而,我想实现这样的类型:如果存在createprop,那么现在必须需要route。有人知道怎么做吗?你应该将这些道具分组,并将分组道具作为可选道具 interface RouteProps{ create: boolean; route: string; } interface Props {

我有如下所示的类型

interface Props {
resource: string;
create?: boolean;
route?: string;
}

如上所述,创建和路由是可选的道具。然而,我想实现这样的类型:如果存在createprop,那么现在必须需要route。有人知道怎么做吗?

你应该将这些道具分组,并将分组道具作为可选道具

interface RouteProps{
create: boolean;
route: string;
}

interface Props {
resource: string;
routeInfo?: RouteProps;
}

您可以将其拆分为两种类型的并集,并将
create
与文字类型一起使用:

type Props = {
  resource: string;
  create?: false;
  route?: string
} | {
  resource: string;
  create: true;
  route: string;
}

虽然我更喜欢@DevLoverUmar的解决方案。实际上,您可以选择使用typescript执行以下操作:

这可能就是你要找的。但您必须显式设置
targets

类型TArgs={
a:T,
b:绳子,
c:T扩展为true?字符串:null
}
使用factory函数时的外观示例:

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)
类型TArgs={
a:T,
c?:T扩展为true?字符串:null
}
常量argsFactory=(a:T,c:T扩展为true?字符串:null):targets=>{
返回{
A.
C
}
}
//工作
argsFactory(真,“字符串”);
argsFactory(false,null);
//不起作用
argsFactory(false,“某些字符串”);
argsFactory(true,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)