泛型是否有可能将对象作为用户传递,而不仅仅是类型,而是作为密钥?
interface store {
category: string
}
interface ajaxResponse<T> {
data: ajaxData<T>
errors: string[]
success: boolean
}
interface ajaxData<T> {
rewards: {
amount: number
error: string
}
T: T
}
function get<T>(url): Promise<ajaxResponse<T>> {
// make ajax GET request
// return json object
}
let res = await get<store>('/my/url')
res.data.store.category
当我这样做时,它说
'ajaxData'
类型中不存在属性'store'
我有办法访问该属性吗?它一旦编译就可以工作了,因为所有这些都被删除了,但是如何让它在编辑器中运行呢?
修改
在考虑之后,我想我不希望界面和属性相同。我想我想使用名为interface
的{{1}},所以可能是这样的:
x
答案 0 :(得分:1)
如果您将属性名称作为显式文字类型,则可以使用mapped type syntax声明具有该名称的属性的类型:
integer, dimension(n) :: v
所以完整的例子看起来应该是
type A<T, PropertyName extends string> = {[P in PropertyName]: T}