【问题标题】:How to use object keys in an interface?如何在界面中使用对象键?
【发布时间】:2019-02-05 09:50:04
【问题描述】:

我有一个用于 redux 操作的接口,它使用存储在对象中的 action_types。但它不允许我这样做。

const action_types = {
  USER_SUCCESS: 'USER_SUCCESS',
  USER_REQUEST: 'USER_REQUEST'    
}

interface IUpdateUser {
  type: action_types.USER_SUCCESS,    // Returns error
  payload:{
    value: string
  }
}

我有什么遗漏吗?

【问题讨论】:

    标签: javascript typescript interface


    【解决方案1】:

    你应该把action_types变成一个枚举:

    enum action_types {
      USER_SUCCESS = 'USER_SUCCESS',
      USER_REQUEST = 'USER_REQUEST' 
    }
    
    interface IUpdateUser {
      type: action_types.USER_SUCCESS,
      payload:{
        value: string
      }
    }
    

    这样,当您在操作类型上使用 switch 时,您也将获得详尽检查。

    【讨论】:

      【解决方案2】:

      访问属性类型的语法错误。你需要使用[]来访问属性类型和typeof来获取const的类型。

      const action_types = {
        USER_SUCCESS: 'USER_SUCCESS' as 'USER_SUCCESS',
        USER_REQUEST: 'USER_REQUEST' as 'USER_REQUEST'    
      }
      
      interface IUpdateUser {
        type: typeof action_types['USER_SUCCESS'],    // ok
        payload:{
          value: string
        }
      }
      
      
      interface IUpdateUser {
        type: typeof action_types['USER_SUCCESS'],    // ok
        payload:{
          value: string
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2022-01-05
        • 1970-01-01
        • 2016-09-22
        • 2014-08-04
        • 2017-01-07
        • 2020-08-05
        • 1970-01-01
        • 1970-01-01
        • 2022-06-28
        相关资源
        最近更新 更多