我有一个接口,仅当c
是a
时才需要true
参数。
interface IArgs {
a: boolean,
b: string,
c: string
}
以下内容似乎有效,但是如何在第一个子句中忽略c
参数?使用type
是因为interface
会返回错误。
type TArgs = {
a: true,
b: string,
c?: string
} | {
a: false,
b: string,
c: string
};
答案 0 :(得分:1)
这可能是您要寻找的。但是您必须显式设置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)