1
我想流添加註解簡單的克隆功能,它看起來並不可能目前。下面是一個嘗試:如何流程註釋克隆功能?
// @flow
var clone = function<T>(obj: T): T {
if (Array.isArray(obj)) {
return obj.map(clone);
}
if (obj && typeof obj === 'object') {
var value = {};
for (var i in obj) {
value[i] = clone(obj[i]);
}
return value;
}
return obj;
}
我使用泛型類型T來表示返回類型是相同的輸入類型。然而,返回以下錯誤:
11: return value;
^^^^^ object literal. This type is incompatible with the expected return type of
2: var clone = function<T>(obj: T): T {
^some incompatible instantiation of `T`
在目標代碼分支,流量知道,返回類型T將是一個對象 - 爲什麼不能像一個對象文本兼容呢?如果不能,我該如何對此進行恰當的註釋?
我可以在此分支中添加(value: any)
,但在這種情況下Flow覆蓋率將不會滿(抱怨any
)。
這不完全是一個答案,但在我看來,不值得花費大量時間試圖正確地檢查這樣的功能。漸進式系統的美妙之處在於您可以挑選並選擇應用它們的位置。這樣的小功能可以很容易地被人類理解,並且很容易測試。在我看來,typecheckers在適用於人類無法輕易理解的大型系統時會大放異彩。只要你有正確的註釋界面(你可以),寫一些測試,然後繼續。 –