Angular Library 11:在构建中包含 index.d.ts

Posted

技术标签:

【中文标题】Angular Library 11:在构建中包含 index.d.ts【英文标题】:Angular Library 11: include index.d.ts in build 【发布时间】:2021-03-05 12:46:32 【问题描述】:

我想为我的库创建类型,它使用来自<script> 的外部 API。如果我构建库 (ng build angular8-yandex-maps --prod) 一切正常,但是当我尝试在 Angular 应用程序中导入构建的库时,它会失败 - Cannot find namespace 'ymaps'Cannot find type definition file for 'yandex-maps' 等。

构建中不包含声明的命名空间,是否可以包含它?

dist/**/*.component.d.ts

Cannot find type definition file for 'yandex-maps'
/// <reference types="yandex-maps" />

复制

打字/yandex-maps/index.d.ts

declare namespace ymaps 
  ...

tsconfig.lib.json


  "extends": "../../tsconfig.json",
  "compilerOptions": 
    "outDir": "../../out-tsc/lib",
    "target": "es2015",
    "declaration": true,
    "declarationMap": true,
    "inlineSources": true,
    "types": ["yandex-maps"],
    "typeRoots": ["../../node_modules/@types", "src/lib/typings"],
    "lib": ["dom", "es2018"]
  ,
  "angularCompilerOptions": 
    "skipTemplateCodegen": true,
    "strictMetadataEmit": true,
    "enableResourceInlining": true
  ,
  "exclude": ["src/test.ts", "**/*.spec.ts"]

【问题讨论】:

【参考方案1】:

.d.ts 不会被复制,你应该使用.ts 代替 + 在public-api.ts 中添加&lt;reference /&gt;。因此编译器将在public-api.d.ts 中创建dist/**/typings/yandex-maps/index.d.ts&lt;reference /&gt;

更多信息:Typescript does not copy d.ts files to build

tsconfig.lib.json


  "extends": "../../tsconfig.json",
  "compilerOptions": 
    "outDir": "../../out-tsc/lib",
    "target": "es2015",
    "declaration": true,
    "declarationMap": true,
    "inlineSources": true,
    "types": [],
    "lib": ["dom", "es2018"]
  ,
  "angularCompilerOptions": 
    "skipTemplateCodegen": true,
    "strictMetadataEmit": true,
    "enableResourceInlining": true
  ,
  "exclude": ["src/test.ts", "**/*.spec.ts"]

typings/yandex-maps/index.ts

declare namespace 
  ...

public-api.ts

// <reference path="./lib/typings/yandex-maps/index.ts" />

更新:

ESLint:不要对 ./lib/typings/yandex-maps/index.ts 使用三斜杠引用,而是使用 import 样式。(@typescript-eslint/triple-slash-reference)

import './lib/typings/yandex-maps/index';

【讨论】:

以上是关于Angular Library 11:在构建中包含 index.d.ts的主要内容,如果未能解决你的问题,请参考以下文章

构建角度库时包含资产

什么是 Angular library 的 secondary entry points?

#私藏项目实操分享# 如何解决 Angular custom library module 在 ng build 时无法被识别的错误

Angular 6 库:在 CI 管道中构建库以创建 lib 版本

angular-testing-library:getByRole 查询仅适用于 hidden: true 选项

构建 Angular 6 库时为导出符号生成的元数据中遇到错误