在我的应用程序中(使用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 私有到该课程,而无法访问来自该应用的其他地方?
答案 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没有此类内容。