ts 泛型如何约束一个不为'xxx'的字符串类型

typescript中泛型如何约束一个值为不等于'checked'的字符串?类似Extract<string, 'checked'>

扩展一下:一个对象类型,里面有name跟value,都是可选的,当name等于字符串check的时候,value 需要变成必填,这个类型该怎么定义?

阅读 2.6k
2 个回答
type T<NameValue extends string> = NameValue extends 'check' ? {
    name: 'check';
    value: string;
    [key: string]: any;
} : {
    name?: NameValue;
    value?: string;
    [key: string]: any;
}
typescript中泛型如何约束一个值为不等于'checked'的字符串?类似Extract<string, 'checked'>
type ExcludeChecked<T extends string> = Exclude<T, "checked">;

type Result = ExcludeChecked<"default" | "checked">;
扩展一下:一个对象类型,里面有name跟value,都是可选的,当name等于字符串check的时候,value 需要变成必填,这个类型该怎么定义?

这个的name要和上面的一样,不能是string,必须是枚举或者联合类型。

type A = {
    name: "check",
    value: unknown,
}
| {
    name: "default",
    value?: unknown,
};
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进