位于打字稿逻辑d.ts

时间:2018-10-11 14:05:09

标签: reactjs typescript

我有这段代码,它是一个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代码,只需要查看导入是否首先输入到打字稿文件中,就是要执行导入工作的文件。

1 个答案:

答案 0 :(得分:0)

在运行时,您的模块加载器会将导入直接解析为实际的实现。当TypeScript语言服务看到导入时,它只关心类型信息,而不关心实现,因此,如果实现文件是.js文件且没有.ts或{{1} },语言服务将在.d.ts包中寻找.d.ts。当您单击导入时,语言服务会将您带到@types。据我了解,这种行为的原因是:

  1. 由于语言服务已经找到了.d.ts而不是.d.ts,因此实现起来更加容易。
  2. 假设您正在基于API编写代码(从软件工程的角度来看,这比看待实现要更为传统,尽管我知道在现实世界中,开发人员经常会遇到无法解决的问题API文档),则.js.d.ts更可能以人类可读的格式描述API,对于实际模块(尤其是经过一些转换过程的模块)而言,.js只要所有正确的元素在完成加载时都已定义完毕,就可以使用任意数量的棘手的代码模式来进行组织。