Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 为什么我能';是否从已省略的类型中省略属性?_Typescript - Fatal编程技术网

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;//现在一切正常