首页 > 解决方案 > 打字稿使用泛型类型创建键

问题描述

我正在尝试编写一个通用接口,它接受两种类型,返回的东西Entry, Tkey, K包含这个的东西。

我不确定这是否可以使用打字稿完成。

有人知道吗?谢谢!

// this is a bad way of doing it
export interface Reconfigure<T> {
  title: string
  keyOne?: Entry<T>[]
  keyTwo?: Entry<T>[]
  keyThree?: Entry<T>[]
  keyFour?: Entry<T>[]
}

// this is close to what I'd want to do, but doesn't work
export interface Reconfigure<T, K> {
  title: string
  [K]: Entry<T>[]
}

标签: typescript

解决方案


您可以使用映射类型。Record预定义的类型Partial应该允许您基于字符串文字类型的联合创建类型。添加类型的固定部分只是使用交集类型 ( &) 的问题:

export type Reconfigure<T, K extends PropertyKey> = Partial<Record<K, Entry<T>>> &  {
    title : string
}

type T = Reconfigure<string, "k1" | "k2" | "k4">
// same as
// type T = {
//     k1?: Entry<string> | undefined;
//     k2?: Entry<string> | undefined;
//     k4?: Entry<string> | undefined;
//     title: string;
// }

游乐场链接


推荐阅读