我如何引入'my-app-name/services'
这样的东西来避免像下面这样的导入?
import {XyService} from '../../../services/validation/xy.service';
我如何引入'my-app-name/services'
这样的东西来避免像下面这样的导入?
import {XyService} from '../../../services/validation/xy.service';
在TypeScript 2.0中,可以在tsconfig.json
中添加baseUrl
属性:
{
"compilerOptions": {
"baseUrl": "."
// etc...
},
// etc...
}
然后,您可以像导入基本目录一样导入所有内容:
import {XyService} from "services/validation/xy.service";
除此之外,您还可以添加一个paths
属性,它允许您匹配一个模式,然后将其映射出来.例如:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"services/*": [
"services/validation/*"
]
}
// etc...
},
// etc...
}
这将允许您从任何地方导入它,比如:
import {XyService} from "services/xy.service";
从这里开始,您将需要配置您正在使用的任何模块加载器,以支持这些导入名称.目前,TypeScript编译器似乎没有自动映射出这些.
你可以在github issue页阅读更多关于这方面的内容.还有一个rootDirs
属性,在使用多个项目时非常有用.
我发现使用"barrels"可以让它变得更容易.
index.ts
文件.Example
在您的情况下,首先创建一个名为my-app-name/services/validation/index.ts
的文件.在此文件中,包含以下代码:
export * from "./xy.service";
然后创建一个名为my-app-name/services/index.ts
的文件,并使用以下代码:
export * from "./validation";
现在你可以像这样使用你的服务(暗示index
):
import {XyService} from "../../../services";
一旦你有了多个文件,它就变得更容易了:
import {XyService, MyOtherService, MyOtherSerivce2} from "../../../services";
必须维护这些额外的文件是一个有点多的前期工作(工作可以消除使用barrel-maintainer),但我发现它的回报与较少的工作结束.进行主要的目录 struct 更改要容易得多,并且减少了必须进行的导入的数量.
Caution
这样做时,有几件事你必须注意,但不能做:
import {XyService} from "../validation";
次).我发现这一点,第一点可能会导致未定义导入的错误.