当我的 Angular 库项目使用"--prod"选项启动时,扩展内置类(通过 ".prototype" 的 JS 属性)的方法不起作用



我正在构建一个具有以下结构的Angular库:

my-library-project
|_ dist
|_ e2e
|_ projects
|_ my-library
|_ extensions
|_ number
|_ src
|_ lib
|_ extension.ts
|_ index.ts
|_ ng-package.json
|_ package.json
|_ public-api.ts
|_ src
|_ test.ts
|_ index.ts
|_ karma.conf.js
|_ ng-package.json
|_ package.json
|_ public-api.ts
|_ tsconfig.lib.json
|_ tsconfig.spec.json
|_ tslint.json
|_ src

extension.ts里面有一个以下代码:

export { };

declare global {
interface Number {
isOdd(): boolean;
}
}
Number.prototype.isOdd = function(): boolean {
return (this % 2) !== 0;
};

我执行$ ng build my-library,在组件中导入my-library/extensions/number,并在构造函数体内编写console.log((2).isOdd())。我执行$ ng s,直到这里一切都没问题,但是如果我使用--prod选项执行,则不存在Number.prototype.isOdd(),因此浏览器会抛出错误,正如我们在其检查中看到的那样。

不需要将其声明为接口。你可以使用一个简单的类,并在那里添加你的方法是Odd。

不同之处在于接口不存在或导出在构建版本中,而类是,这实际上也最大限度地减少了文件大小。

编辑

定义如下所示的类。这是奇数方法将可用。接口不会被导出,更多的是用于定义类型,而在类中,您可以定义行为。在此处阅读有关打字稿中的接口和类的更多信息 https://basarat.gitbooks.io/typescript/docs/types/interfaces.html .

export class MyClass {
public isOdd(): boolean {
// your code
}
}

希望这有帮助。

相关内容

  • 没有找到相关文章

最新更新