给定这 2 个 typescript 文件
api/Token.ts
interface Token {
code: string
}
export default Token
和index.ts
export * from './api/Token'
带有 --declarations
开关的 tsc 1.5 将生成两个 .d.ts
文件(具有相似的内容)
api/Token.d.ts
interface Token {
code: string;
}
export default Token;
和index.d.ts
export * from './api/Token';
使用以下选项运行 grunt-dts-bundle
dts_bundle: {
release: {
options: {
name: 'my-module',
main: 'index.d.ts'
}
}
}
将生成一个包含以下内容的环境模块声明文件my-module.d.ts
declare module 'my-module' {
export * from './api/Token';
}
但是由于以下原因,此声明无法编译:环境模块声明中的导入或导出声明无法通过相对模块名称引用模块。
我如何自动为上面的两个 typescript 文件生成环境模块声明?
编辑
请关注 https://github.com/Microsoft/TypeScript/issues/2262 上的最新更新
最佳答案
我最近写了一篇 blog post对这个。总而言之,您可以使用 autodts如果将 index.ts
替换为 api.ts
,包含以下内容:
export {default as Token} from './api/Token';
确保 api.ts
与 api
目录位于同一位置(在其旁边,而不是在其内部)。
然后你需要一个package.json
文件:
{
"name": "api",
"version": "1.0.0",
"main": "dist/api.js",
"scripts": {
"preinstall": "npm install autodts",
"postinstall": "autodts link",
"prepublish": "tsc && autodts generate"
},
"typescript": {
"definition": "index.d.ts"
},
"dependencies": {
"autodts": "~0.0.4"
},
"devDependencies": {
"@lib/autodts-generator": "~0.0.1",
"typescript": "~1.5.3"
}
}
包名 api
与文件 api.ts
和目录 api
匹配很重要。这样,在使用您的包时,Node.js 和 TypeScript 编译器将在相同的位置查找。
最后,你需要一个 tsconfig.json
文件:
{
"compilerOptions": {
"declaration": true,
"module": "CommonJS",
"target": "es5",
"outDir": "dist"
},
"files": [
"api.ts"
]
}
现在 npm install
将编译您的包并生成一个捆绑的 index.d.ts
文件,如 中的
.definition
设置所定义>package.json
要使用您的包,您可以执行以下操作:
/// <reference path = "api/index.d.ts" />
import {Token} from 'api';
class foo {
key: Token;
}
您可以使用autodts 链接
使引用路径
保持最新,为此请查看博客文章和/或autodts 文档。
生成的 index.d.ts
包含:
/// <reference path="index.ref.d.ts" />
declare module 'api/Token' {
interface Token {
code: string;
}
export default Token;
}
declare module 'api' {
export { default as Token } from 'api/Token';
}
index.ref.d.ts
和 api.js
都是空白。
关于module - 自动生成环境模块声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31654376/