gpt4 book ai didi

typescript - 澄清索引类型查询运算符和扩展关键字

转载 作者:搜寻专家 更新时间:2023-10-30 21:08:27 25 4
gpt4 key购买 nike

我正在阅读有关 Typescript 中高级类型的文档(可在此处找到:https://www.typescriptlang.org/docs/handbook/advanced-types.html),它提到了索引查询运算符并给出了以下示例:

function pluck<T, K extends keyof T>(o: T, names: K[]): T[K][] {
return names.map(n => o[n]);
}

我了解 keyof 如何生成对象 T 上所有已知公共(public)属性名称的联合,但我不完全了解 extends 的作用> 播放。我知道这是说 K 必须是 T 的有效属性,但为什么使用 extends 而不是其他东西?此外,是否可以在 Typescript 中扩展联合,或者这更多是泛型特有的语义?

谢谢。

最佳答案

在此上下文中,关键字 extends 是一种对类型参数添加约束的方法。

给出这个简单的例子,你会看到编译器只允许你传入符合Person接口(interface)的对象:

interface Person {
name: string;
}

function logAndReturnPerson<T extends Person>(person: T) {
console.log(person.name);
return person;
}

// ok
const result1 = logAndReturnPerson<Person>({ name: "David" });
// not ok, string does not satisfy constraint of Person
const result2 = logAndReturnPerson<string>("");

在您的示例中,K extends keyof T 表示 K 被限制为 keyof T。换句话说,这意味着您的想法——K 是一个字符串,它被限制为 T 的属性名称。

是的,这是泛型特有的语义。请注意,可以在约束中使用联合类型。

关于typescript - 澄清索引类型查询运算符和扩展关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46438142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com