ts中的extends keyof写在右侧是什么意思?

发布于 2022-09-13 01:22:16 字数 117 浏览 19 评论 0

b11e190b5bc246dd26a1e129e36bb99.jpg

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

烟雨扶苏 2022-09-20 01:22:16

这个真的会

泛型中的含义:T 约束为 Paths 的 key,U 约束为 Paths 的值

等号后面:为条件类型。如果 T 的类型为 Paths 的 key,则返回是 Paths 的 key 为 T 的值,的类型

涉及到知识点,类型约束、获取类型的 key 的联合类型、条件类型

暮凉 2022-09-20 01:22:16

举个例子:

interface Paths {
    PathItem1: {
        a: string;
        b: number;
    };
    PathItem2: {
        c: boolean;
        d: number;
    };
}

type UrlType<T extends keyof Paths, U extends keyof Paths[T]> = Paths[T][U];

type A = UrlType<'PathItem2', 'c'>; // A -> boolean
type B = UrlType<'PathItem1', 'a'>; // B -> string

当UrlType的第一个泛型,即T传入'PathItem2'的时候, U的约束则为 keyof Paths['PathItem2'], 也就是 'c' | 'd'
Paths[T]则为 Path['PathItem2']

{
    c: boolean;
    d: number;
};

当第二个泛型传入'c'时 Paths[T] [U]则为 Paths['PathItem2'] ['c'] 也就是boolean

另外我认为这段代码是无意义的代码
T extends keyof Paths ? Paths[T] [U] : any
因为T已经做过了泛型约束, 所以传入的T必然是keyof Paths这个联合类型中的一个值, 如果不是的话,在传入T的时候TS会报错

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文