首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用只扩展Array对象的库

使用只扩展Array对象的库
EN

Stack Overflow用户
提问于 2019-09-03 15:49:26
回答 2查看 58关注 0票数 0

我有一个库,其类型定义如下:

代码语言:javascript
代码运行次数:0
运行
复制
declare global {
    interface Array<T> {
        addRange<T>(elements: T[]): void;
        aggregate<U>(accumulator: (accum: U, value?: T, index?: number, list?: T[]) => any, initialValue?: U): any;
    }
}

然后将这个库导出到NPM包,但是如何在另一个项目中使用它呢?

如果我试着做:

代码语言:javascript
代码运行次数:0
运行
复制
['a', 'b'].addRange(['c', 'd']);

我得到了

代码语言:javascript
代码运行次数:0
运行
复制
Property 'addRange' does not exist on type

但是我不能仅仅导入addRange,因为它们是数组扩展。

我如何导入这个库,这样打字本就知道了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-03 22:00:25

通常在npm包的package.json types字段中公开类型。如果这些类型包括全局类型增强,则在您需要客户端项目中的包时,编译器将自动获取它们。

package.json (图书馆):

代码语言:javascript
代码运行次数:0
运行
复制
{
  "name": "__testPackage",
  "types": "index.d.ts"
  ...
}

index.d.ts (图书馆):

代码语言:javascript
代码运行次数:0
运行
复制
declare global {
  interface Array<T> {
    addRange<T>(elements: T[]): void;
    aggregate<U>(
      accumulator: (accum: U, value?: T, index?: number, list?: T[]) => any,
      initialValue?: U
    ): any;
  }
}

export const foo: number;

app.ts (客户端):

代码语言:javascript
代码运行次数:0
运行
复制
// if you remove the import, Array.prototype.addRange won't compile
import { foo } from "__testPackage";

console.log(foo); // 42

const arr = ["a", "b"];
arr.addRange(["c", "d"]); // compiles
console.log(arr); // [ 'a', 'b', 'c', 'd' ]
票数 1
EN

Stack Overflow用户

发布于 2019-09-03 19:03:57

创建一个annonimous函数,将额外的特性添加到数组中,并将其封装到()中,以便您可以调用它。

示例:

代码语言:javascript
代码运行次数:0
运行
复制
(function(){
   // add the extension methods here
})()

然后将其添加到tsconfig.json或tsconfig.app.json中的角8到文件中。

代码语言:javascript
代码运行次数:0
运行
复制
{
  ...
  "files": [
    // your extension path here,
    "src/main.ts",
    "src/polyfills.ts"
  ],
  ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57775036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档