【问题标题】:typescript interface: specify full specific enum as parameter打字稿接口:指定完整的特定枚举作为参数
【发布时间】:2018-05-06 22:15:50
【问题描述】:

我想提供一个接口来保证枚举定义将被传递。

// msg.ts, here's an example enum
export enum Messages {
  A,
  B
}

// interfaces.d.ts
export interface IThingy {
  Messages: Messages
  // ^ how do I specify that Messages should be the actual, full enum, not a member of the enum?
}

我希望消费者能够访问该枚举,就像它被注入一样。例如:

function (param: IThingy) {
   param.Messages.A // ok!
}

如果这不可能,我怎么可能达到同样的效果?最终我只想传递一个常量、强类型的 K:V (string:string) 映射。

我确实看到了类似的:Enum as Parameter in typescript,尽管我的意图完全不同。

【问题讨论】:

    标签: typescript enums


    【解决方案1】:

    好吧,你完全可以这样做:

    export enum Messages {
      A,
      B
    }
    
    function fn(param: typeof Messages) {
      console.log(param.A); // ok!
    }
    
    fn(Messages);
    fn(string); // no
    // although, due to Structural typing:
    fn({A: 0, B: 1}); // works!
    

    当然,我不确定这样做的目的。如果你传递一个具体的枚举,你并不需要传递它,因为你可以通过它的名字来引用它。正如您引用的问题所指出的那样,您不能做的是创建一个接受 any 枚举且仅接受枚举的函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-03
      • 2020-05-09
      • 2019-09-25
      • 2018-09-23
      • 2019-12-27
      • 2020-12-09
      相关资源
      最近更新 更多