Typescript 在枚举中使用键时排除枚举项
我有这样一个枚举(只是稍微大一点): 我使用它来定义需要使用这些键的类型:Typescript 在枚举中使用键时排除枚举项,typescript,Typescript,我有这样一个枚举(只是稍微大一点): 我使用它来定义需要使用这些键的类型: export type MyTypeKeyFunctionValue = { [key in MyTypeEnum ]?: Function }; export type MyTypeKeyStringValue = { [key in MyTypeEnum ]?: string }; 所以在我的课堂上,我可以做一些类似的事情: private memberWithFunctions: MyTypeKeyFunctio
export type MyTypeKeyFunctionValue = { [key in MyTypeEnum ]?: Function };
export type MyTypeKeyStringValue = { [key in MyTypeEnum ]?: string };
所以在我的课堂上,我可以做一些类似的事情:
private memberWithFunctions: MyTypeKeyFunctionValue;
现在,我遇到了一个特殊情况,当一些成员需要在MyTypeEnum
中拥有所有键,但只有一个(比如说two
)时,我不知道如何定义一个类型来排除该键,但保留所有其他键
有什么方法可以做到这一点吗?您可以使用
Exclude
条件类型从enum
export type MyTypeKeyStringValue = {
[key in Exclude<MyTypeEnum, MyTypeEnum.two> ]?: string
};
导出类型MyTypeKeyStringValue={
[输入排除]?:字符串
};
使用省略
类型跳过属性
type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
类型省略=拾取;
用法:
const foo: Omit<MyTypeKeyFunctionValue, MyTypeEnum.two> = {
/* ... */
}
const foo:Omit={
/* ... */
}
当我声明memberWithFunctions:MyTypeKeyStringValue
并以这种方式使用它时:this.memberWithFunctions[someEnumValue]
Typescript说:元素隐式具有“any”类型,因为类型“MyTypeKeyStringValue”没有索引签名。[7017]@distante由于某些enum成员不能是密钥,因此您需要防范它们。第一次访问导致错误第二次访问没有:声明let a:MyTypeKeyStringValue;声明let x:MyTypeEnum;设r0=a[x]如果(x!==MyTypeEnum.two){let r=a[x]}
我明白了!我永远不会从那个错误中得出那个结论。谢谢你@titian cernicova dragomir。也许你应该在答案中加上这个?
const foo: Omit<MyTypeKeyFunctionValue, MyTypeEnum.two> = {
/* ... */
}