【问题标题】:Add function to class from another file in Typescript将函数从 Typescript 中的另一个文件添加到类
【发布时间】:2018-05-03 13:04:33
【问题描述】:

我想知道是否有可能在 Typescript 中的类的原型中添加一些函数。

我的情况是这样的: 我有一个带有类的文件,例如image.ts:

export class Image {
    b64img: string;
}

这个类是生成的,所以我不能给它添加方法。我在其他生成的类中使用该类,因此无法使用 extends Image 创建一个新类来添加函数。

是否有任何选项可以让我在一个单独的文件中向我的类添加一个函数,以便我可以在 Image 类的所有对象上使用它?

谢谢

【问题讨论】:

    标签: function typescript extension-methods


    【解决方案1】:

    你可以。您可以通过为定义它的模块定义扩展来扩展它。

    创建一个名为 image-extension.ts 或类似名称的文件。

    现在,如果在该文件中,您将像这样导入 Image

    import { Image } from `image`;
    
    declare module 'image' { // same name than in the import!
        export interface Image {
             newMethod: () => void;
        }
    }
    
    Image.prototype.newMethod = function() {
        console.log('new method');
    }
    

    现在,无论您在何处导入此文件,都可以使用该方法:

    import { Image } from 'image';
    import 'image-extension'; // import just for side-effects
    

    当然,您也可以将declare module 添加到d.ts 文件中,这样它就会自动加载,并在另一个文件中将真正的函数添加到原型中,确保这样的文件被加载到您的应用程序中

    【讨论】:

    • 感谢您的回答。如果我不导入'image-extension',编译器不会引发任何错误,但在运行时会出现一条消息说 newMethod 是未知的。如果扩展方法没有正确导入,有没有办法出现编译器错误?
    猜你喜欢
    • 2020-02-26
    • 2012-06-30
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 2014-09-05
    相关资源
    最近更新 更多