这是 Typescript 的基本实现Pick
实用程序类型来自本教程 https://learntypescript.dev/09/l3-condition-utility-types
type ObjectWithKeys<T, K extends keyof T> = {
[P in K]: T[P];
};
我明白它的作用,但我发现它的用途K extends keyof T
有点混乱。我们要确保 K 是联合类型的成员(或成员的联合)keyof T
。它永远不会“扩展”它,所以为什么要使用extends
运营商在这里?
Typescript 是否缺少运算符,而这是当前最好的选择?
我经常被重用所困扰extends
也是如此,但在某种程度上这是真的。类型是"a" | "b" | "c"
,但你可以使用其他可分配给它的东西,例如"a" | "b"
:
type ObjectWithKeys<T, K extends keyof T> = {
[P in K]: T[P];
};
type A = {
a: number;
b: number;
c: number;
}
type X = ObjectWithKeys<A, "a" | "b">; // Works
游乐场链接 https://www.typescriptlang.org/play?#code/C4TwDgpgBA8gRgKwgY2AdQJbABYGkIgDOAPACoA0UuUEAHsBAHYAmhUA1gQPYBmUpAPigBeKAG8AUFGlQA2gAUoGRlQC6ALn4LVAbgkBfPRNCQoAQRHipMgIabGAVwC2cCACc9MqHHvPXH62lkXxd3PX0JY3BoAA1LeCRUTBx8ImIzSgAiG0yoAB8oTLhMgR0oAHpyqDQuN3ZCIA
从这个意义上来说,你可以看到"a" | "b"
作为子类型(更专业的版本)"a" | "b" | "c"
,就像一个对象类型more属性是一个子类型,其属性的子集(我们也通过extends
,具有接口和class
句法)。
我们(好吧,好吧,I'm)习惯于认为子类型比超类型拥有“更多的东西”,因为我习惯于考虑对象类型(这是真的,{a: number; b: number;}
是一个子类型{a: number;}
),但对于联合,情况正好相反,子类型有fewer成员多于超类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)