类似于 Revealing Module Pattern 结构的 TypeScript 代码
TypeScript code similar to Revealing Module Pattern structure
我想将我编写的一些 JavaScript 代码转换为 TypeScript。作为一名 JavaScript 开发人员,我对 TypeScript 语法和思维方式还比较陌生。
让我头疼的是我不得不将一些使用 Revealing Module Pattern 的代码转换成 TypeScript。
一个例子如下:
//JS Code
var obj;
//code...
(function(){
function myFunction(){
//do work
}
function MyOtherConstructor(){
return {
publicMethod: myFunction
}
}
obj = new MyOtherConstructor();
})();
//use obj.publicMethod in code later
我想到的一个解决方法是:
//TypeScript code
var obj;
class MyOtherConstructor {
private callback: any;
constructor(f: any){
this.callback = f;
}
publicMethod(): any{
this.callback();
}
}
//code...
(() => {
function myFunction(){
//do work
console.log("Called myFunction");
}
obj = new MyOtherConstructor(myFunction);
})();
//use obj.publicMethod in code later
这有效,但它很丑。
有什么改进的建议吗?
如果您需要单个对象 obj
,则不要使用 class。命名空间更适应:
namespace obj {
function myFunction() {
// ...
}
export var publicMethod = myFunction;
}
如果您更喜欢保留 class,那么这里有一个更简洁的代码:
class MyOtherConstructor {
constructor(public publicMethod: () => void) {
}
}
我想将我编写的一些 JavaScript 代码转换为 TypeScript。作为一名 JavaScript 开发人员,我对 TypeScript 语法和思维方式还比较陌生。
让我头疼的是我不得不将一些使用 Revealing Module Pattern 的代码转换成 TypeScript。
一个例子如下:
//JS Code
var obj;
//code...
(function(){
function myFunction(){
//do work
}
function MyOtherConstructor(){
return {
publicMethod: myFunction
}
}
obj = new MyOtherConstructor();
})();
//use obj.publicMethod in code later
我想到的一个解决方法是:
//TypeScript code
var obj;
class MyOtherConstructor {
private callback: any;
constructor(f: any){
this.callback = f;
}
publicMethod(): any{
this.callback();
}
}
//code...
(() => {
function myFunction(){
//do work
console.log("Called myFunction");
}
obj = new MyOtherConstructor(myFunction);
})();
//use obj.publicMethod in code later
这有效,但它很丑。
有什么改进的建议吗?
如果您需要单个对象 obj
,则不要使用 class。命名空间更适应:
namespace obj {
function myFunction() {
// ...
}
export var publicMethod = myFunction;
}
如果您更喜欢保留 class,那么这里有一个更简洁的代码:
class MyOtherConstructor {
constructor(public publicMethod: () => void) {
}
}