如何在界面中使用对象键?

时间:2019-02-05 09:50:04

标签: javascript typescript interface

我有一个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
  }
}

有什么我想念的吗?

2 个答案:

答案 0 :(得分:0)

访问属性类型的语法错误。您需要使用[]访问属性类型,并使用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
  }
}

答案 1 :(得分:0)

您应该将action_types变成一个枚举:

enum action_types {
  USER_SUCCESS = 'USER_SUCCESS',
  USER_REQUEST = 'USER_REQUEST' 
}

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

这样,当您在操作类型上使用switch时,也可以进行详尽的检查。