【问题标题】: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
}
}