gpt4 book ai didi

typescript - 类型声明在不丢失名称的情况下删除类型周围的 "Array"

转载 作者:行者123 更新时间:2023-12-05 05:48:12 25 4
gpt4 key购买 nike

我正在和一个 friend 一起做一个项目,我们想创建一个类型,其中该类型具有接口(interface)中键的第一个值,如果它们匹配,其余的应该匹配相关函数的参数。

export default interface ClientToServerEvents {
'authenticate': (token: string) => void;
'update-title': (title: string, annoteId: string) => void;
}
type Partial<T> = { [P in keyof T]: [P, Parameters<T[P]>]; };
type ClientToServerEventsType = ValueOf<Partial<ClientToServerEvents>>;

这就是我们目前所得到的,它导致了一个看起来像这样的类型:

type ClientToServerEventsType = ["authenticate", string] | ["update-title", string, string]

这几乎是我们想要的,但我们希望类型也保留参数的名称,而不仅仅是字符串。我们想要的是:

type ClientToServerEventsType = ["authenticate", token: string] | ["update-title", title: string, annoteId: string]

我们已经找了一个小时了,还是找不到任何东西。谢谢!

最佳答案

元组元素必须全部命名或全部不命名。由于您的元组没有第一个元素的名称,因此所有其他名称都将被删除。

如果您为第一个元素命名,您将看到保留的名称:

type AllParams<T extends Record<keyof T, (...a: any)=> any>> = { 
[P in keyof T]: [name: P, ...rest: Parameters<T[P]>];
};
type ClientToServerEventsType = ValueOf<AllParams<ClientToServerEvents>>;
// [name: "authenticate", token: string] | [name: "update-title", title: string, annoteId: string]

Playground Link

关于typescript - 类型声明在不丢失名称的情况下删除类型周围的 "Array",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70854913/

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