TypeScript版本: 3.1.0
搜索词:
keyof extends pick exclude
代码
interface Base {
base1: number;
base2: number;
}
class Data<T extends Base> {
alpha(k:keyof Pick<T, Exclude<keyof T, "base1">>) { }
beta(k:keyof Pick<T, keyof T>) { }
}
function wrapped<T extends Base>() {
let d = new Data<T>();
d.alpha("base2"); // Argument of type '"base2"' is not assignable to parameter of type 'Exclude<keyof T, "base1">'.
d.beta("base2"); // works
}
预期行为:
alpha和beta都应该可以工作。
实际行为:
alpha不能工作:'参数类型为"base2"的Argument无法分配给参数类型为'Exclude<keyof T, "base1">'的T。
Playground链接:
Playground链接
相关问题:
2条答案
按热度按时间smdncfj31#
关于这个,@weswigham@ahejlsberg 有什么想法吗?
vkc1a9a22#
我不确定,但我认为我在 v3.3.1 中找到了相同的问题。请让我知道我是否错了,我可以打开一个新的问题。这是一个最小的复现,我的实际用例是从嵌套的 react 高阶组件生成的
Exclude<Exclude
类型。playground