问答

typescript泛型

作者:admin 2021-05-05 我要评论

interface EventMap { "select": (id: string) = void; "update": () = void;}interface IEventK extends keyof EventMap { type: string; fn: EventMap[K]}inte...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

image.png

interface EventMap {
  "select": (id: string) => void;
  "update": () => void;
}
interface IEvent<K extends keyof EventMap> {
  type: string;
  fn: EventMap[K]
}
interface CustomMap<K extends keyof EventMap> {
  [key: string]: IEvent<K>
}

const map: CustomMap = {}

我期望map的key为EventMap的key,value为IEvent结构

###
interface EventMap {
  "select": (id: string) => void;
  "update": () => void;
}

interface IEvent<K extends keyof EventMap> {
  type: string;
  fn: EventMap[K]
}

type CustomMap = {
  [K in keyof EventMap]: IEvent<K>
}

const map: CustomMap = {}

当然了,也可以整合一下更清爽:

interface EventMap {
  "select": (id: string) => void;
  "update": () => void;
}

type CustomMap = {
  [K in keyof EventMap]: {
    type: string;
    fn: EventMap[K]
  }
}

const map: CustomMap = {}
###

interface QueryEventMapHandler {
    select: (id: string) => void
    update: () => void
}

interface QueryEvent<K extends keyof QueryEventMapHandler> {
    type: string;
    fn: QueryEventMapHandler[K]
}

type SuperMap = Record<keyof QueryEventMapHandler, QueryEvent<keyof QueryEventMapHandler>>

const map: SuperMap = {
    select: {
        type: 'big',
        fn: (id: string) => { console.log(id) }
    },
    update: {
        type: 'small',
        fn: () => { }
    }
}

要得是这种写法?

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • typescript泛型

    typescript泛型

  • golang json解析的问题

    golang json解析的问题

  • js中如何用一个数组去替换另一个数组指

    js中如何用一个数组去替换另一个数组指

  • 如果一个vue项目里有html静态资源,里

    如果一个vue项目里有html静态资源,里

腾讯云代理商
海外云服务器