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)