问几个ts的问题

求教几个ts的问题,ts版本3.x

  1. 如何给一个接口的key统一加个前缀,如{a:string,b:number}变成{ta:string,tb:number}
  2. 如何设置一个函数的返回值是某个接口的key,比如有接口{age:number,name:string},一个函数传入string,然后返回string,但是这函数的返回值是上面那个接口的key,也就是age或者name
  3. 两个结构一样的接口如何优雅的写,比如接口A{a:{b:string}},接口B{c:{d:string}},两个接口的结构和类型是一样的,只有key不一样
  4. ts如何通过if判断来设置type,比如true是a|b,false是c|d,我看有个is,不知道是不是
阅读 1.8k
1 个回答
如何给一个接口的key统一加个前缀,如{a:string,b:number}变成{ta:string,tb:number}

3.x版本不支持,从4.1开始支持 Template Literal

// Helpers
type Prefix<T extends string, P extends string> = `${P}${T}`;

type PrefixKey<T, P extends string> = {
  [K in keyof T as Prefix<K & string, P>]: T[K];
};


interface Origin {
  a: string;
  b: number;
}

type Decorated = PrefixKey<Origin, "t">;

如何设置一个函数的返回值是某个接口的key,比如有接口{age:number,name:string},一个函数传入string,然后返回string,但是这函数的返回值是上面那个接口的key,也就是age或者name
type API = (input: string) => Promise<"age" | "name">;

两个结构一样的接口如何优雅的写,比如接口A{a:{b:string}},接口B{c:{d:string}},两个接口的结构和类型是一样的,只有key不一样

只要有不同之处,就是完全不同的类型。所以你说的结构和类型一样的是错误的。在这种情况下,你必须写出每个不同的类型。
如果这两个类型有相似可推导的部分,你可以写一些帮助类型生成你要的新类型。

type MyInterface<K0 extends string, K1 extends string, V> = {
  [Key0 in K0]: {
    [Key1 in K1]: V;
  };
};

type A = MyInterface<"a", "b", string>;
type B = MyInterface<"c", "d", string>;

ts如何通过if判断来设置type,比如true是a|b,false是c|d,我看有个is,不知道是不是

Typescript中是没有if语句的。要进行条件推导,可以使用三元运算。

type MyConditionalType<T extends boolean> = T extends true
  ? "a" | "b"
  : "c" | "d";
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题