[英]Strongly typed Immutable.js Records in TypeScript
我找不到這個問題的好資源。 本質上,我想使用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[]>
簡單聲明嗎? 然后針對此添加到列表的任何Map進行類型檢查? 我已經為此工作了好幾天,但我根本無法使它起作用,根據我所讀的所有內容,它應該是如此簡單。
任何幫助將不勝感激。
您正在創建trees
arrays
List
,這是擴展的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
})
]
]
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.