typescript1.4 - TypeScript - 無法在類別外建立「delete」函式
我面臨的問題是,在類別定義之外,我無法創建名稱與關鍵字相同的函數。
這個相同的「問題」也發生在其他關鍵字上,但這裡關注的關鍵字是 delete。
這個有效:
class WebServiceInterface {
create(): void { }
retrieve(): void { }
update(): void { }
delete(): void { }
}
注意我有一個名為 "delete" 的函數成員。
但是這不起作用:
class WebServiceInterface {
create(): void { }
retrieve(): void { }
update(): void { }
delete(): void { }
}
module Web {
var defaultInterface = new WebServiceInterface();
export function create() { defaultInterface.create(); }
export function retrieve() { defaultInterface.retrieve(); }
export function update() { defaultInterface.update(); }
export function delete() { defaultInterface.delete(); }
}
export function delete 中的 delete 部分會導致這些錯誤:
- 預期識別符。
- 預期有表達式。
- 預期出現「;」。
有沒有一個根本的原因,為什麼這不可以/不應該被允許?這也許只是語言中需要實現的某些東西嗎?有沒有其他方式可以達到這個目的?
供參考,我在 Visual Studio 2013 中使用 TypeScript 1.4。
答案#1
當你想要直接從命名空間/模組匯出 delete 命名函數時,這個小技巧可能會有幫助,可在此找到。export as 用於繞過這個問題。
export default Package;
declare namespace Package {
function _delete(...args: any[]): any;
export { _delete as delete };
}
答案#2
這裡的問題是 delete 是 JavaScript 的保留字。
移除刪除區塊後生成的程式碼是:
var WebServiceInterface = (function () {
function WebServiceInterface() {
}
WebServiceInterface.prototype.create = function () {
};
WebServiceInterface.prototype.retrieve = function () {
};
WebServiceInterface.prototype.update = function () {
};
WebServiceInterface.prototype.delete = function () {
};
return WebServiceInterface;
})();
var Web;
(function (Web) {
var defaultInterface = new WebServiceInterface();
function create() {
defaultInterface.create();
}
Web.create = create;
function retrieve() {
defaultInterface.retrieve();
}
Web.retrieve = retrieve;
function update() {
defaultInterface.update();
}
Web.update = update;
})(Web || (Web = {}));
猜猜當取消註解刪除區塊時它會嘗試生成什麼程式碼?
function delete() {
defaultInterface.delete();
}
Web.delete = delete;
問題是這不是有效的 JavaScript,因為 delete 是保留字。
