在 Typescript 中,在拋出(TypeError)時是否使用 new 有區別嗎?
throw TypeError("some error here")
和
throw new TypeError("some error here")
?
uj5u.com熱心網友回復:
這更像是一個 JavaScript 問題,而不是一個 TypeScript 問題。不,技術結果沒有區別,兩者都創建新TypeError物件(規范中的詳細資訊)。當正常呼叫(不是通過new)時,Error各種“本機”錯誤建構式(TypeError、、ReferenceError等)都將執行new呼叫(構造呼叫)而不是正常呼叫。
const e1 = new TypeError("Error message here");
console.log(e1 instanceof TypeError); // true
console.log(e1.message); // Error message here
const e2 = TypeError("Error message here");
console.log(e2 instanceof TypeError); // true
console.log(e2.message); // Error message here
這是 TypeScript playground 上的相同代碼,顯示 TypeScript 將e1和e2視為 type TypeError。原因是 TypeScript 對TypeError(in lib.es5.d.ts) 的主要定義如下所示:
interface TypeError extends Error {
}
interface TypeErrorConstructor extends ErrorConstructor {
new(message?: string): TypeError;
(message?: string): TypeError;
readonly prototype: TypeError;
}
declare var TypeError: TypeErrorConstructor;
如您所見,它同時具有new(message?: string): TypeError;(建構式呼叫回傳TypeError)和(message?: string): TypeError;(正常呼叫回傳TypeError)。
主觀上,new代碼的讀者更清楚 using ,強調正在創建一個新物件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/433055.html
標籤:javascript 打字稿
