我有一個帶有 next 和打字稿的專案,我在這個函式打字稿中有一個通用遞回函式說屬性“建構式”在型別“T”上不存在。
這是我的職能
export const deepClone = <T>(obj: T):T => {
if (obj === null || typeof (obj) !== 'object') {
return obj;
}
let temp;
if (obj instanceof Date) {
temp = new Date(obj); //or new Date(obj);
} else if (obj) {
temp = obj.constructor();
}
for (const key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
temp[key] = deepClone(obj[key]);
}
}
return temp;
}
uj5u.com熱心網友回復:
您在此處看到的行為是由稍微過時的 TypeScript 版本引起的。
在大多數情況下,縮小函式中的泛型型別是非常不可靠的。但是由于#49119被合并,泛型型別object在控制流分析期間與使用時相交typeof x === "object"。
在 typeof x === "object" 運算式的控制流分析中,泛型型別在 true 分支中與 object 和/或 null 相交(其他型別的 typeof 檢查已經以類似的方式產生交集)。
#49119是在 TypeScript 4.8 版中引入的;因此升級您的版本將是解決此問題的最佳選擇。
export const deepClone = <T>(obj: T):T => {
if (obj === null || typeof (obj) !== 'object') {
return obj;
}
obj
// ^? obj: T & object
obj.constructor();
}
4.8.4 上的作業游樂場
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/537058.html
上一篇:Dart泛型方法無法識別型別
