【发布时间】:2017-10-07 01:54:03
【问题描述】:
我正在尝试编写一个在其他几个打字稿应用程序之间共享的打字稿库。为此,我将每个库作为其自己的节点模块,并将库设置为发出其声明文件。
为了测试我有一个文件的共享库设置:
lib\guid.ts
export class Guid {
static EmptyGuid(): string {
return '00000000-0000-0000-0000-000000000000';
}
}
lib\tsconfig.json
{
"compilerOptions": {
"noImplicitAny": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"module": "amd",
"noEmitOnError": true,
"removeComments": false,
"target": "es5",
"sourceMap": true,
"declaration": true,
"outFile": "./lib/lib-b.js"
},
"exclude": [
"node_modules",
"!node_modules/@types",
"lib"
]
}
我最终得到一个如下所示的声明文件:
lib\lib-b.d.ts
declare module "guid" {
export class Guid {
static EmptyGuid(): string;
}
}
最后我将节点模块设置为包含输入信息:
lib\package.json
{
"name": "lib-b",
"version": "1.0.0",
"description": "",
"main": "./lib/lib-b.js",
"typings": "./lib/lib-b.d.ts",
"files": [
"lib"
],
"author": "",
"license": "ISC"
}
现在在使用库的应用程序中,我使用 npm 将其引入:
app\package.json
{
"name": "web-app",
"version": "1.0.0",
"description": "",
"main": "./lib/index.html",
"author": "",
"license": "ISC",
"dependencies": {
"lib-b": "file:../LibB"
}
}
在其中一个文件中,我尝试像这样使用该库:
import { Guid } from 'lib-b';
但这给了我以下错误:
error TS2306: File '.../WebApp/node_modules/lib-b/lib/lib-b.d.ts' is not a module.
我一直在环顾四周,但我发现的大多数示例都在谈论为已经存在的 JS 库编写类型 - 我找不到太多关于使用现有打字稿代码中的声明文件的内容。声明文件是否可以在其他应用程序中使用?还有另一种构建可重用打字稿库的方法吗?
【问题讨论】:
-
"file:../LibB"在哪里? -
应用中的文件入口指向共享库模块。
-
需要用amd还是可以用commonjs?
标签: typescript typescript-typings