我无法找到这个问题的好资源。基本上我想用TypeScript中的接口描述我的数据类型,但我的数据是Immutable.js记录,这看起来很复杂,请看下面的例子。
interface tree extends Immutable.Map<string, any> {
readonly id: number,
readonly type: number
}
let trees = Immutable.List<tree[]>([
Map<tree>({
id: 101,
type: 1
}),
Map<tree>({
id: 201,
type: 3
})
])
上述问题:
<tree[]>
是否应该简单地声明类型?然后添加到列表中的任何地图都要针对此进行类型检查吗?我已经在这方面工作了好几天,我根本无法让它工作,根据我读过的所有内容应该很简单。
非常感谢任何帮助。
答案 0 :(得分:4)
您正在创建List
arrays
trees
Map
,这是一个扩展let trees = Immutable.List<tree[]>(
[ // List
[ // Array
<tree>Immutable.Map<any>({
id: 101,
type: 1
}),
<tree>Immutable.Map<any>({
id: 201,
type: 3
})
]
]
);
。这应该是它的样子:
Map
回答你的问题:
<tree>
。我添加了trees
广告,因为它是var singleTree: tree = Immutable.Map<tree>(
{ id: 101, type: 1 }
);
的数组,而不是地图。你正在尝试这样的事情:
any
但您的树是let singleTree: tree = <tree>Immutable.Map<any>(
{ id: 101, type: 1 }
);
类型的地图。所以,这是正确的语法:
tree
对于上面的代码,如果我们创建一个Map
函数来包装function tree(obj: { [key: string]: any, id: number, type: number }): tree {
return <tree>Immutable.Map<any>(obj);
}
let trees = Immutable.List<tree[]>(
[ // List
[ // Array
tree({
id: 101,
type: 1
}),
tree({
id: 201,
type: 3
})
]
]
);
函数,我们可以简化并强制进行类型检查,因此,最终的解决方案是:
"[href='#"+id+"']").parent().find('div')