2017-06-13 451 views
0

看起来在TypeScript中有两种使用接口的方式:我可以在普通的.ts文件中定义它们并导入它们,或者我可以在.d.ts文件中定义它们,让编译器自动从node_modules/@中找到它们或者通过在tsconfig.json中为typeRoots添加相关路径,并且它们变得“魔术般”可用。使用TypeScript声明(* .d.ts)和接口的正确方法是什么?

目前我有两个项目:一个客户端(React)和一个服务器(Express),都是用TypeScript编写的。我在两个项目中都使用了某些接口,为了避免项目之间的依赖关系,我将通用接口提取到一个单独的项目中,并声明为声明文件。然后我说这个项目作为一个开发依赖这种方式:

"@types/my-definitions": "git+ssh://[email protected]/myaccount/my-definitions.git" 

这样打字稿编译器会自动从node_modules/@类型找到接口,我没有导入接口。

我的问题是,这是一个很好的做法,或者我应该有普通的.ts文件中的接口,将项目作为普通依赖项导入,并显式导入我正在使用的接口?每种方法的优缺点是什么?

回答

0

.d.ts文件根据您的.ts文件生成为打印脚本项目的输出(以及编译后的JS)。

通常这些是通过导入引入的,而不是通过魔法发现,因为它们位于特定的文件夹中。

当你使用DOM/BOM/NodeJS定义的环境JS全局变量时,你希望将.d.ts放在该魔法文件夹中的时间,以便它们可用于所有代码。你不需要明确地导入它们,它们总是可用的(就像它们将在JavaScript中一样)

然而,当处理一个实际的库(输出JavaScript代码)时。您应该通过package.json导入库并通过查看node_modules来配置TypeScript来解析模块。

调用document.createElement()返回HTMLElement。通过添加环境定义,您不必导入document对象。

但是,假设你使用的角度,当你想使用一个角类,你必须明确地导入

import {Component} from "@angular/core" 

打字稿会知道去寻找ts文件node_modules/@angular/core。它可能是一个原始的.ts,但这些通常不会打包为TypeScript项目的输出,通常您只能获得编译后的JS和.d.ts文件。

摘要

你应该把你的可重用代码的第三方库像角并导入它以同样的方式。不要神奇地将这些定义添加到环境中(我们有足够的全局变量)

相关问题