TypeScript具有私有类成员的概念(即使私有和公共之间的区别不会归结为JavaScript输出)。
this.stemAPI.submitBOLData(this.submitAllData, this.reap.token)
.subscribe(
res => { /* Do what you want with this error */ },
err => { /* Error handled here */ }
);
或者,可以简单地不从模块中导出方法,而将方法从使用者“隐藏”。
// Pattern A
export class Foo {
constructor() {
this.doSomething();
}
// private method
private doSomething() {}
}
在所有Typescript代码库中,是否有实际理由偏爱其中一种模式?
答案 0 :(得分:1)
我认为唯一重要的区别是私有方法可以通过this
访问实例变量和方法,而未导出的帮助器函数则不能。无论哪种方式,我都会感到满意。
您已经注意到了这一点,但是为了后代,我想使用private方法指出版本的编译输出:
var Foo = /** @class */ (function () {
function Foo() {
this.doSomething();
}
// private method
Foo.prototype.doSomething = function () { };
return Foo;
}());
Typescript将doSomething
分配给Foo
原型,这与实现公共方法相同。 “私有”限制仅由Typescript在编译时强制执行。如果将此代码与纯Javascript代码结合使用,则JS代码将能够像调用公共方法一样容易地调用private方法。但是在一个全Typescript项目中没关系。
不使用Typescript时,通常通过在类构造函数中定义私有方法来实现私有方法。这将为每个实例创建一个新的方法副本,该副本将关闭构造函数中的变量,这可能导致更多的内存使用。我认为了解Typescript不遵循该模式很有用。在Typescript中,私有方法与公共方法具有相同的性能特征。
答案 1 :(得分:1)
模式B并非打字稿方式,而是JavaScript方式。
在所有打字稿的代码库中,我肯定更喜欢模式A,因为:
doSomething
属于Foo
类,也就是说,它在语义上要好得多。Foo
函数中访问doSomething
实例的成员,那么它也将变得更加容易,而不会弄乱.bind()