TypeScript - 无法在 class 之外创建 "delete" 函数
TypeScript - Unable to create a "delete" function outside of a class
我面临的问题是,在 class 定义之外,我无法创建名称与关键字相同的函数。
同样的 "issue" 与其他关键字一起出现,但 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
部分导致这些错误:
- 需要标识符。
- 预期的表达。
- ';'预期。
是否有不允许这样做的根本原因?t/shouldn?这可能只是需要用语言实现的东西吗?还有其他方法可以实现吗?
作为参考,我在 Visual Studio 2013 中使用 TypeScript 1.4。
delete
是Javascript中的保留字,不能作为函数名使用。
当你将它用作 属性 名称时要小心,因为我怀疑 IE8 不喜欢那样。
您无法命名 函数 delete
。这是 JavaScript 中的语法错误。模块中的函数就是函数。
你可以命名一个属性delete
。 类 中的方法是原型或实例的属性,因此在那里有效。
这里的问题是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 是保留字。
我自己最近 运行 陷入了这个问题。解决此限制的方法是将模块声明为对象。有点恶心,但它有效。
例如:
declare var Web: WebServiceInterface;
这样你就得到了一个名为 Web 的变量,上面有相关的函数。
显然,如果 Web
或 WebServiceInterface
包含其他功能/属性,您需要引入这样的接口:
class WebServiceInterface {
create(): void { }
retrieve(): void { }
update(): void { }
delete(): void { }
doOther()
// etc
}
interface IWebObject {
create(): void;
retrieve(): void;
update(): void;
delete(): void;
specialFunction(): void;
defaultInterface: WebServiceInterface;
// etc
}
declare var Web: IWebObject;
当您想直接从 namespace/module 中导出 delete
命名函数时,这个小技巧对我很有帮助,找到了 here。 export as
用于绕过问题。
export default Package;
declare namespace Package {
function _delete(...args: any[]): any;
export { _delete as delete };
}
我面临的问题是,在 class 定义之外,我无法创建名称与关键字相同的函数。
同样的 "issue" 与其他关键字一起出现,但 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
部分导致这些错误:
- 需要标识符。
- 预期的表达。
- ';'预期。
是否有不允许这样做的根本原因?t/shouldn?这可能只是需要用语言实现的东西吗?还有其他方法可以实现吗?
作为参考,我在 Visual Studio 2013 中使用 TypeScript 1.4。
delete
是Javascript中的保留字,不能作为函数名使用。
当你将它用作 属性 名称时要小心,因为我怀疑 IE8 不喜欢那样。
您无法命名 函数 delete
。这是 JavaScript 中的语法错误。模块中的函数就是函数。
你可以命名一个属性delete
。 类 中的方法是原型或实例的属性,因此在那里有效。
这里的问题是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 是保留字。
我自己最近 运行 陷入了这个问题。解决此限制的方法是将模块声明为对象。有点恶心,但它有效。 例如:
declare var Web: WebServiceInterface;
这样你就得到了一个名为 Web 的变量,上面有相关的函数。
显然,如果 Web
或 WebServiceInterface
包含其他功能/属性,您需要引入这样的接口:
class WebServiceInterface {
create(): void { }
retrieve(): void { }
update(): void { }
delete(): void { }
doOther()
// etc
}
interface IWebObject {
create(): void;
retrieve(): void;
update(): void;
delete(): void;
specialFunction(): void;
defaultInterface: WebServiceInterface;
// etc
}
declare var Web: IWebObject;
当您想直接从 namespace/module 中导出 delete
命名函数时,这个小技巧对我很有帮助,找到了 here。 export as
用于绕过问题。
export default Package;
declare namespace Package {
function _delete(...args: any[]): any;
export { _delete as delete };
}