代码之家  ›  专栏  ›  技术社区  ›  Luckylooke

不接受typescript touppercase()转换

  •  1
  • Luckylooke  · 技术社区  · 6 年前

    我将源类型定义为:

    unit:'hour''day''week''month'
    

    我使用它作为moment.js库的小写字母。bu我也需要它的后端端点大写。所以我的HTTP方法接受参数为

    unit:'hour''day''week''month'
    

    但typescript不接受在方法调用中通过touppercase进行的转换。

    “string”类型的参数不能分配给“hour”“day”“week”“month”类型的参数

    在typescript中是否有一个优雅的解决方案,我不会破坏静态类型检查,同时也不会生成额外的convertor helper函数(自定义touppercase)?

    谢谢你的建议!:)

    unit: 'HOUR'|'DAY'|'WEEK'|'MONTH'
    

    但在方法调用中,typescript不接受通过touppercase进行的转换。

    “string”类型的参数不能分配给“hour”“day”“week”“month”类型的参数

    enter image description here

    在typescript中是否有一个优雅的解决方案,我不会破坏静态类型检查,同时也不会生成额外的convertor helper函数(自定义touppercase)?

    谢谢你的建议!:)

    1 回复  |  直到 6 年前
        1
  •  1
  •   Titian Cernicova-Dragomir    6 年前

    你可以延长 toUpperCase

    interface String {
        toUpperCase(this: 'hour'|'day'|'week'|'month') : 'HOUR'|'DAY'|'WEEK'|'MONTH'
    }
    
    declare let low: 'hour'|'day'|'week'|'month';
    let up = low.toUpperCase(); // typed as "HOUR" | "DAY" | "WEEK" | "MONTH"
    

    如果您在模块中,则需要在全局命名空间中重新声明字符串:

    declare global {
        interface String {
            toUpperCase(this: 'hour' | 'day' | 'week' | 'month'): 'HOUR' | 'DAY' | 'WEEK' | 'MONTH'
        }
    }