【问题标题】:Typescript dynamically create types based on objectTypescript 根据对象动态创建类型
【发布时间】:2020-09-22 00:08:20
【问题描述】:

可以通过简单地分析对象属性来动态生成类型注释,例如:

cons myObj = {
        start() { /*...*/ },
}

我想生成/返回以下类型:

type Props = {
  start: () => void;
  isScreenStart: () => boolean;
  isStartAllowed: () => boolean;
}

给定一个像advance 这样的属性,它应该生成以下类型

advance: () => void;
isScreenAdvance: () => boolean;
isAdvanceAllowed: () => boolean;

【问题讨论】:

    标签: typescript


    【解决方案1】:

    latest TS version (4.1) 可以做到这一点:

    type Generate<T> = {
        [K in keyof T & string as T[K] extends Function ?
        `isScreen${capitalize K}` | `is${capitalize K}Allowed` :
        never]: () => boolean
    } & T
    
    type Generated = Generate<typeof myObj> 
    // { isScreenStart: () => boolean; isStartAllowed: () => boolean; } & { start(): void; }
    

    你可以看看this sample code。请注意,最终版本的编译器关键字 capitalizesubject to change

    【讨论】:

    • 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2019-10-20
    • 1970-01-01
    • 2014-09-12
    • 2020-09-19
    • 1970-01-01
    • 2017-09-30
    相关资源
    最近更新 更多