在 TypeScript 写的 React 项目中引入普通 JS 写的包,必须写 d.ts 吗?

2018-06-22 12:29:36 +08:00
 zcdll

如题

我想要在一个用 TypeScript 写的 React 项目中引入普通 JS 写的包,自己已经发布到 NPM 上了,webpack 打包的时候 libraryTarget: "commonjs2"

然后我在引入的时候,import XXX from XXX,webstorm 报错,提示 TS7016: Could not find a declaration file for module XXX

我想知道,我必须写一个 d.ts 吗?

还是我用 webpack 打包的方式不对?

我发现某些网上的包也是普通 JS 写的,也没有找到 d.ts ,但是引入的时候没有问题,例如 react-select 这个

8680 次点击
所在节点    React
6 条回复
sneezry
2018-06-22 13:29:55 +08:00
是的,必须写一个 d.ts 。

react-select 有 types: https://www.npmjs.com/package/@types/react-select
zcdll
2018-06-22 14:57:23 +08:00
@sneezry 抱歉,看到 react-select 的 d.ts 了。

不过我们还用了另外一个库,[dom-to-image]( https://github.com/tsayen/dom-to-image),这个包没找到 d.ts 啊。

我们用的是 `const domtoimage = require('dom-to-image')` 的方式引入的,然后可以用。

这个是什么意思?
sneezry
2018-06-22 15:25:00 +08:00
https://www.npmjs.com/package/@types/dom-to-image

这些纯粹的 js 流行项目有社区维护它们的类型
zcdll
2018-06-22 15:55:11 +08:00
@sneezry 感谢!

我刚才查了好些东西,大概懂你说的意思了。

不过有新的疑问了,我看介绍说是,通过 npm i @types/dom-to-image -S 这样的方式安装的的话,会按照这些 types。

但是我的安装方式是 npm i dom-to-image -S,而且 package.json 里面也没有 types 这个字段。

社区维护的 types 在 https://www.npmjs.com/package/@types/dom-to-image 这里,那么 他是怎么进入我的项目中的呢?

我全局搜索了一下,没有找到 dom-to-image 的 d.ts
aaronly
2018-06-22 16:35:41 +08:00
库包含 .d.ts, npm i lib -S
库不包含,@types 里能找到, npm i lib -S; npm i @types/lib -D
库不包含,@types 里找不到, search gayhub, npm i gaytypedef -D
库不包含, @types 里找不到, gayhub 搜不到,自己写
zcdll
2018-06-22 22:39:51 +08:00
@aaronly 了解了,谢谢!

这周末打算重构一下我们自己的一个包

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/464999

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX