我有这段代码,它是一个React Typescript项目:
import { Trans, translate, InjectedTranslateProps } from 'react-i18next';
然后:
export const Home: React.SFC<InjectedTranslateProps> = props => (
当我在InjectedTranslateProps上单击webstorm时,它将带我到/node_modules/@types/react-i18next/src/props.d.ts
为什么要带我去@types而不是'react-i18next'软件包? 我的意思是所有链接都将我带到@types,而不是node_modules中react-i18next的正确文件夹
那么,所有内容都通过@types传递,我是将其与真实包连接的库吗?
我不需要查看javascript代码,只需要查看导入是否首先输入到打字稿文件中,就是要执行导入工作的文件。
答案 0 :(得分:0)
在运行时,您的模块加载器会将导入直接解析为实际的实现。当TypeScript语言服务看到导入时,它只关心类型信息,而不关心实现,因此,如果实现文件是.js
文件且没有.ts
或{{1} },语言服务将在.d.ts
包中寻找.d.ts
。当您单击导入时,语言服务会将您带到@types
。据我了解,这种行为的原因是:
.d.ts
而不是.d.ts
,因此实现起来更加容易。.js
比.d.ts
更可能以人类可读的格式描述API,对于实际模块(尤其是经过一些转换过程的模块)而言,.js
只要所有正确的元素在完成加载时都已定义完毕,就可以使用任意数量的棘手的代码模式来进行组织。