angular - 增强第三方库 Typescript

标签 angular typescript

我正在开发一个 Angular 5 项目。我引用了从 NPM (odata-v4-ng) 下载的第三方库。我需要在这个库中扩充一个类来添加一些方法。该类是这样声明的。

export declare class ODataQuery extends ODataQueryAbstract {
  // methods omitted for brevity
}

我试图通过这种方式扩充类(class):

import { ODataQuery } from 'odata-v4-ng';

declare module 'odata-v4-ng' {
  interface ODataQuery {
    test();
  }
}

ODataQuery.prototype.test = () => { };

问题是编译器会抛出“'ODataQuery' 只引用一个类型,但在这里被用作一个值。”。如果我在我的 Angular 项目中创建一个类并以这种方式扩充它,一切正常。

有什么想法吗?

最佳答案

该特定类在另一个模块中定义,并且仅由主 odata-v4-ng 模块重新导出。如果您扩展定义类的实际模块,一切似乎都可以正常工作:

import { ODataQuery } from 'odata-v4-ng';

declare module './node_modules/odata-v4-ng/src/app/odata/odata-query/odata-query' {
  export interface ODataQuery {
    test():void
  }
}

ODataQuery.prototype.test = () => { };

关于angular - 增强第三方库 Typescript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49589241/

相关文章:

css - 如何让行内 div 内的按钮进行换行? ( flex 和 Angular )

javascript - 我应该从 HTMLProps<HTMLElement> 继承 react Prop 吗?

html - Angular NgFor 元素水平显示为标签

Angular 2 和浏览器自动填充

javascript - 为什么这些数组扩展在运行时不可用

TypeScript 反射(reflect)元数据找不到名称 'Symbol'

javascript - 使用 typescript 修改 JSON

javascript - Electron + typescript 文件结构

javascript - 如果在调用 sleep 函数后增加 sleep 时间,则 Promise.all 中的延迟将不起作用

android - Ionic 4 文件上传到上一页