typescript 包可见性(创建库)

use*_*356 5 package declare typescript angular

我正在创建一个用于不同项目的打字稿库。我想要的是仅向外部发布类函数的一个子集,并在我的库内部使用其他函数。

在示例中:

/* Person.ts */
export class Person{
    getName(){
        .....
        return name;
    } 
    getInfos(){

    }
}

/* People.ts */
export class People{
    ...
    setName(){
       let p = new Person();
       ...
       let n = p.getName();
       ....
    }

}
Run Code Online (Sandbox Code Playgroud)

我希望我的库公开 Person getInfos() 和 People setName(),但我希望 Person getName 只能在内部访问。也许我必须创建一个 Person.d.ts ,只向外部用户公开一种方法,但我不明白如何做。

谢谢

Max*_*kyi 1

您必须区分编译时封装和运行时封装。如果您只需要编译时封装,则可以使用@tricheriche 建议的方法并声明getName为私有或使用@yurzui 的更高级方法。

如果您想要运行时封装,则必须使用不同的方法。如果导出一个类,它会导出其所有方法,就像 JavaScript 中的所有方法都是公共的一样。要隐藏某些功能,您可以在模块中创建一个函数getName但不要公开它。您将能够使用它,但在外部无法使用它:

function getName() {... return name;}

export class Person{
    getInfos(){
        return getName.call(this);
    }
}
Run Code Online (Sandbox Code Playgroud)