Typescript 为什么我能';是否从已省略的类型中省略属性?
我有一个简单的例子,从另一个已经省略的类型中省略属性:Typescript 为什么我能';是否从已省略的类型中省略属性?,typescript,Typescript,我有一个简单的例子,从另一个已经省略的类型中省略属性: 类型省略=拾取; 接口A{ x:字符串; y:数字; } 接口B扩展了A{ z:日期; w:布尔型; } 类型ompita=Omit; 类型Omit b=Omit; 类型OmitA只有预期的属性“y”。但OmitB类型抛出错误: 类型“z”不满足约束“Exclude”。ts(2344) 这是一个bug还是这段代码有问题 更新1 如果我将OmitB类型更改为: 类型Omit b=Omit; 这对我来说是不必要的。这是您定义省略的方式的一个
类型省略=拾取;
接口A{
x:字符串;
y:数字;
}
接口B扩展了A{
z:日期;
w:布尔型;
}
类型ompita=Omit;
类型Omit b=Omit;
类型OmitA只有预期的属性“y”。但OmitB类型抛出错误:
类型“z”不满足约束“Exclude”。ts(2344)
这是一个bug还是这段代码有问题
更新1
如果我将OmitB类型更改为:
类型Omit b=Omit;
这对我来说是不必要的。这是您定义
省略的方式的一个限制,K
必须是T的一个键。但是由于T
是一个未解析的类型参数,typescript无法判断Omit
是否真的包含z
(更像是它并不麻烦)。有很多方法可以解决这个问题,但最简单的解决方案是使用ommit
的定义,该定义将很快添加到typescript 3.5()中,它不需要K
到扩展keyof T
type Omit<T, K> = Pick<T, Exclude<keyof T, K>>; // no constraint as in the new Omit in 3.5
interface A {
x: string;
y: number;
}
interface B extends A {
z: Date;
w: boolean;
}
type OmitA<T extends A> = Omit<T, 'x'>;
type OmitB<T extends B> = Omit<OmitA<T>, 'z'>; // works fine now
type Omit=Pick;//没有3.5中新省略的约束
接口A{
x:字符串;
y:数字;
}
接口B扩展了A{
z:日期;
w:布尔型;
}
类型ompita=Omit;
类型Omit b=Omit;//现在一切正常