如何访问Typescript / ES6类中定义的函数? (以及如何从公共方法中识别私人)

时间:2016-03-12 16:58:15

标签: typescript

在我的应用程序中(使用Typescript)我有一些函数导出:

utility.ts

// I want this function not being accessible elsewhere in the app
function __fn3(){
     console.log('fn2');
}

// I want the following functions to be aprt of a class/interface (see below)
export function fun1 () { console.log('fn1'); }
export function fun2 () { __fn3() }
// etc.

other-file.ts 中我通过以下方式访问它们:

 import {fun1, fun2} from "/utility";

但是我想在类" Utility"中定义函数,例如

utility.ts

 export class Utility {
   fun1 () { console.log('fn1'); }
   fun2 () { console.log('fn2'); } }

并且能够通过

other-file.ts 中访问它们
  

Utility => FUN1

(或类似的东西)。

我尝试做同样的事情,我没有得到任何错误,但功能也没有执行。我的做法有什么不对?也许我应该定义模块(如果是,如何?)?

此外,如何确保__fn3 私有到该课程,而无法访问来自该应用的其他地方?

1 个答案:

答案 0 :(得分:1)

你写它的方式很好用。您只需在 other-file.ts 中更改import语句,即可导入Utility类而不是函数。

import {Utiliy} from "/utility";

new Utility().fun1();

如果您不想创建Utility的新实例,或者不需要,可以将Utility类中的方法设为静态。

 export class Utility {
   static fun1 () { console.log('fn1'); }
   fun2 () { console.log('fn2'); } 
 }

other-file.ts 中,你可以写。

import {Utiliy} from "/utility";

Utility.fun1(); // static method invoked with class name

new Utility().fun2(); // non static method needs an instance

对于私有方法,您可以在方法上添加访问限定符

export class Utility {
  private fun1() {
    console.log('fn1');
  }
  fun2() {
    console.log('fn2');
  }
}

然后编译器不会让你调用fun1(),因为它是私有

在某些情况下,隐私也是在运行时通过将代码转换为javascript的方式实现的。

请记住,访问限定符仅适用于TypeScript,ES6没有此类内容。