我正在尝试构建一个私有模块,我知道它只会被另一个TypeScript项目使用。
据此,(https://github.com/Microsoft/TypeScript/issues/5225)我应该能够简单地导入我的其他项目,而不需要构建类型定义。
问题是,当我试图导入该库时,我缺少该库上任何依赖项的类型定义。
情况如下:
假设你有两个项目<代码>库和应用程序
app
导入lib
,这是一个纯类型脚本节点模块。
├── app/ │ ├── dist/ │ │ ├── index.d.ts │ │ ├── index.js │ │ └── index.js.map │ ├── src/ │ │ └── index.ts │ ├── package.json │ ├── package-lock.json │ └── tsconfig.json └── lib/ ├── src/ │ └── index.ts ├── package.json ├── package-lock.json └── tsconfig.json
app
只是从lib
导入一个函数并运行它:
import lib from "lib";
lib("test");
Lib导入依赖项及其类型,并导出函数:
package.json
:
"dependencies": {
"dotenv": "^6.1.0"
},
"devDependencies": {
"@types/dotenv": "^4.0.3",
"typescript": "^3.1.6"
}
app/src/index。ts
:
import dotenv from "dotenv";
dotenv.load()
export default (message: string) => {
console.log(message);
}
当我尝试构建app
时,我从lib
依赖项中得到一个关于缺失类型定义的错误:
node_modules/lib/src/index.ts:1:20 - error TS7016: Could not find a declaration file for module 'dotenv'. 'lib/node_modules/dotenv/lib/main.js' implicitly has an 'any' type. Try `npm install @types/dotenv` if it exists or add a new declaration (.d.ts) file containing `declare module 'dotenv';` 1 import dotenv from "dotenv";
处理这种情况的正确方法是什么?它在混合的JS/TS模块中工作得很好,因为“编译边界”将在导入的模块及其公开的类型处结束,但由于该模块是“纯”类型脚本,它将对其所有依赖项进行爬网,就好像它是一个大型repo一样。
设置这个的正确方法是什么?或者真正的问题是npm安装
没有安装dev依赖项?我应该安装所有的@type
作为prod依赖项吗?
是的,在我上一次构建typescript npm模块的经验中,我必须包括我们的第三方软件包打字@type/
我的上一个npm模块是使用ioredis构建的。所以我的模块
包。json
如下所示:
{
"name": "my-redis",
"version": "1.0.0",
"dependencies": {
"ioredis": "^4.2.0",
"@types/ioredis": "^4.0.3"
},
}
这样,如果模块安装在其他系统中,它将自动检测打字,否则该系统必须手动安装打字包。
根据这个:https://www.typescriptlang.org/docs/handbook/declaration-files/publishing.html
建议将所有依赖项安装为产品依赖项:
我们的包公开了其中每一个的声明,因此我们的browserify typescript扩展包的任何用户都需要具有这些依赖关系。出于这个原因,我们使用了“依赖项”而不是“devdependency”,因为否则我们的消费者将需要手动安装这些软件包。如果我们刚刚编写了一个命令行应用程序,而不希望我们的包被用作库,那么我们可能会使用devdependency。
所以基本上,如果你正在编写一个打字稿npm模块,所有的依赖都必须是prod依赖。
问题内容: 我正在Heroku上编写一个node.js应用程序,并使用pg模块。我无法弄清楚为查询数据库所需的每个请求获取客户端对象的“正确”方法。 该文档使用如下代码: 但是,您肯定不需要在使用数据库的每个函数中调用对吗?我看过其他执行此操作的代码: 我倾向于第二种选择,因为我相信Heroku的免费数据库实例无论如何都仅限于一个连接,但是以这种方式进行操作是否有任何弊端?每次使用之前,是否需要检
问题内容: 我在Django 1.6上无法正常使用翻译存在问题。我已将此添加到我的settings.py中: 还添加了中间件: 以及每当我使用应为l10nd的字符串时的* .py文件: 我的模板开始于: 在模板内部,我使用了trans占位符。例如 我在locale / de / LC_MESSAGES / django.po中提供了翻译: 问题答案: 添加到并将其设置如下: 请注意,它必须是一个元
问题内容: 我的代码如下: 如果在获取之前设置标题,可以吗?我的标头会被发送,还是服务器会看到默认的用户代理(如果有)? 问题答案: 必须 先设置标头,然后才能产生任何影响- 如果连接已经打开,则将引发。 就头而言,如果已设置,则应将其发送。 请参阅URLConnection JavaDoc。
问题内容: 在UML图上,代表模板类的正确方法是什么? 问题答案: 在右上角带有虚线矩形的普通矩形,代表模板参数。像这样:
我在试图让我的文本字段与我在控制器类中定义的ActionEvent句柄连接时遇到问题。这个错误是由java造成的。朗,反思一下。调用TargetException。我一直试图在视图中创建控制器类的实例,然后使用lamba方法引用调用控制器类中的handle方法。 查看类 控制器类 主课 堆栈跟踪
git_repository/android_project/settings.gradle完整清单 git_repository/android_project/build.gradle完整清单