如何在Typescript [模块扩充]中覆盖属于app域的库模型?

时间:2017-02-08 12:53:32

标签: javascript angularjs oop angular typescript

我目前使用两个具有相同代码的应用程序用于模型。

我想创建并共享一个使用继承的库模型(Typescript)。

示例: Pet extends Author

在我当前的应用程序(Angular,新的应用程序)中,我需要将属于app域的一些prototypal函数添加到我的Pet和Author类中。

示例:

pet.extension文件

Pet.prototype[‘fetchUrl’]

author.extension文件

 Author.prototype[‘follow’]

所以我创建了一个名为pet.extension的文件,导入pet.class我添加域方法,然后导出并使用这些重载的类。

当我创建一个新实例时,我导入了这个扩展名。没问题。我的班级(Pet)有扩展的prototypal方法。但是,此扩展程序(重载类)使用pet.classpet.class extends author.class而非author.extension

您知道如何创建和使用重载版本的作者吗?

我的最终目标是模拟Swift语言中的等价扩展。保持在我的图书馆中的oop结构。

我希望我很清楚:)

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

相对于我之前的帖子,我终于找到了我想要做的确切术语。模块扩充。

import { Model } from ‘my-library’;

declare module ‘my-library’ {
    interface Model {
        newMethod(): string
    }
}

Model.prototype.newMethod = function() {
    return ‘something’;
}

这是一个例子。 Visual Studio代码调试器从" Model.prototype.newMethod"

返回模型上的以下错误
  

“型号'仅指类型,但在此处用作值。

我试图从commonjs和amd导出我的库,但是遇到了同样的问题。

所以我尝试重现Typescript documentation上可用的相同代码。

这次,模型对象上没有显示错误,但是在赋值方法上显示错误:

  

' Property' newMethod'在“模型”类型中不存在。

我正在使用typescript 2.1.6作为我的库,而2.0.3使用angular。

它开始让我疯狂。什么错误的想法?

非常感谢你的帮助。