- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个名为 'vee-type-safe'
的库,用于运行时类型检查。一切都很顺利,直到我添加了一个子目录 /express
和一个文件 /express/index.ts
,我在其中导出了一些 ExpressJS
中间件类型检查工厂。所以我有以下结构:
vee-type-safe
|- build
|- package.json
|- declarations
| |- is-iso-date.d.ts
|
|- tsconfig.json
|- index.ts // lightweight core library
|- express
|-index.ts // express middleware factories
在 express/index.ts
文件中,我导入了我的库核心 '../index.ts'
模块。在我的核心模块中,我有以下导入:
import isISODate = require('is-iso-date');
'is-iso-date'
包没有类型,所以我用 is-iso-date.d.ts
创建了 declarations
目录> 就这么简单:
declare module 'is-iso-date' {
function isISODate(suspect: string): boolean;
export = isISODate;
}
我将 "typeRoots": [ ..., "declarations"]
添加到 tsconfig.json
我将 "types": "build/index.d.ts"
添加到 package.json
当我在我的包中运行 tsc
时,一切都编译无误。但是当我通过 npm 安装我的 'vee-type-safe'
库作为对某个项目的依赖并尝试编译它时,我收到以下错误:
Could not find a declaration file for module 'is-iso-date'.
'/home/tegeran/projects/is-iso-date-issue/node_modules/is-iso-date/index.js'
implicitly has an 'any'type.
Try `npm install @types/is-iso-date` if it exists or add a new declaration (.d.ts)
file containing `declare module 'is-iso-date';`
1 import isISODate = require('is-iso-date');
只有当我导入 'vee-type-safe/express'
子模块时才会发生这种情况。当我导入我的核心 'vee-type-safe'
模块时,没有生成任何错误。我在这里错过了什么?我创建了 a github repo with a bare minimum project to demonstrate this error
最佳答案
当你在外部项目上运行tsc
时,vee-type-safe
的tsconfig.json
文件没有生效,所以没有强制 tsc
加载 vee-type-safe/declarations/is-iso-date.d.ts
。对于 vee-type-safe
的导入,这是可以的,因为 vee-type-safe/package.json
的 types
字段重定向到vee-type-safe/build/index.d.ts
,自 vee-type-safe/index 以来,它不引用
仅在实现中使用 is-iso-date
。 tsis-iso-date
并且不公开任何类型。但是,vee-type-safe/express
的导入会绕过 vee-type-safe/package.json
并加载 vee-type-safe/express/index .ts
直接导入,该文件导入 vee-type-safe/index.ts
,后者导入 is-iso-date
,您会收到错误。更重要的是,vee-type-safe/express
的导入不会在运行时运行,因为它不会解析为 .js
文件。
你有几个选项来解决这个问题,但都不是很好:
vee-type-safe/build/express
,它将解析为 vee-type-safe/build/express/index.d.ts
.vee-type-safe
中删除 outDir
选项,以便 .d.ts
文件与 一起生成。 ts
文件。vee-type-safe/express
(以及您希望其他项目能够导入的每个其他子模块路径)分别重定向到 build
下的正确文件创建一对导入真实路径的 .js
和 .d.ts
文件或带有 main 的 package.json
文件
和 types
引用真实路径的字段。 (更新:看起来 main
就足够了,因为 TypeScript 会尝试更改 main
路径的扩展名。)参见 this issue以供进一步讨论。
关于 typescript 。导入 "module/subdirectory"npm 包时未找到环境声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53229412/
在我们的数据库表上,我们使用两个唯一的非聚集索引来创建跨四个字段的唯一约束。我们使用两个,因为其中一个字段 ZipCode 是一个可为空的字段。如果表中存在一条包含 ZipCode 的 null 条目
我刚刚开始学习 Rails 3 教程,以便对框架有一点熟悉,但我在生成 schema.rb 时遇到了问题。我的操作系统是 Windows 7 x64、Ruby 1.9.2、MySQL2 gem 0.2
我是一名优秀的程序员,十分优秀!