假设我有一个项目,它的主要源目录是:

C:\product\src

基于此目录,每个导入路径都将与其相对.也就是说,假设:

// Current script: C:\product\src\com\name\product\blah.ts

import { thing } from '/com/name/product/thing';

等同于:

// Current script: C:\product\src\com\name\product\blah.ts

import { thing } from '../../../com/name/product/thing';

我的条目编译文件位于:

C:\product\src

例如.那么,有没有办法在编译器选项中指定这样的入口路径(例如C:\product\src)?我需要在tsconfig.json文件中指定,因为我将使用webpack.

我试过上面的例子,但TypeScript说找不到请求的模块:

// Current script: A.ts

import { B } from '/com/B';


// Current script: B.ts

export const B = 0;

我的Tconfig.json文件(在另一个项目中,但两者都类似):

{
    "compilerOptions": {
        "module": "commonjs",
        "noImplicitReturns": true,
        "noImplicitThis": true,
        "noUnusedLocals": true,
        "preserveConstEnums": true,
        "removeComments": true,
        "sourceMap": true,
        "strictNullChecks": true,
        "target": "ES6"
    },

    "include": [
        "./src/**/*.ts",
        "./src/**/*.d.ts"
    ]
}

推荐答案

(重新发布我的答案以避免小狗插口.)

使用compilerOptions.baseUrl属性,我可以进行以下导入.这允许我拥有一个完整的根目录到预期路径,这有助于我的代码维护,并且可以在任何文件中工作,与当前文件夹无关.以下示例将我的项目的src文件夹作为模块根目录.

重要建议:此baseUrl属性不会影响条目网页包文件(至少对我来说是这样?),因此,用这个例子分离src文件夹中的一个主文件,并从条目(即import { Main } from './src/Main'; new Main;)中运行它,只运行一次.

// browser: directory inside src;
//   * net: A TS file.
import { URLRequest } from 'browser/net';

tsconfig.json个例子:

{
    "compilerOptions": {
        "baseUrl": "./src",
        "module": "commonjs",
        "noImplicitReturns": true,
        "noImplicitThis": true,
        "noUnusedLocals": true,
        "preserveConstEnums": true,
        "removeComments": true,
        "sourceMap": true,
        "strictNullChecks": true,
        "target": "ES6"
    },

    "include": [
        "./src/**/*.ts",
        "./src/**/*.d.ts"
    ]
}

然而,它不会直接与webpack一起工作.同样的事情也必须在webpack选项中进行.这是webpack 2中的工作原理:

module.exports = {
  ...
  , resolve: {
      ...
      , modules: [ path.join(__dirname, './src') ]
    }
}

Typescript相关问答推荐

具有映射返回类型的通用设置实用程序

为什么ESLint抱怨通用对象类型?

typescribe警告,explate—deps,useEffect依赖项列表

从typescript中的对象数组中获取对象的值作为类型'

如何解决类型T不能用于索引类型{ A:typeof A; B:typeof B;. }'

我可以以这样一种方式键入对象,只允许它的键作为它的值吗?

等待用户在Angular 函数中输入

react 路由Use RouteLoaderData类型脚本错误

使用Redux Saga操作通道对操作进行排序不起作用

剧作家元素发现,但继续显示为隐藏

在Cypress中,是否可以在不标识错误的情况下对元素调用.Click()方法?

类型与泛型抽象类中的类型不可比较

类型实例化过深,可能是无限的&TypeScrip中的TupleUnion错误

如何键入并类型的函数&S各属性

垫子工具栏不起作用的Angular 布线

任何导航器都未处理有效负载为";params";:{";roomId";:";...";}}的导航操作

如何处理可能为空的变量...我知道这不是Null?

如何提取具有索引签名的类型中定义的键

Typescript 和 Rust 中跨平台的位移数字不一致

有没有办法将类型与关键更改相匹配?