【问题标题】:Sublime Typescript崇高的打字稿
【发布时间】:2014-06-11 12:53:54
【问题描述】:

如果我有两个打字稿文件,比如说 a.ts 和 b.ts a.ts 内容为:

export class A {
    greet():void{
        console.log("hi");
    }
}

b.ts 内容为:

export class B {
    constructor(){
        var a:A=new A();
        a.greet();
    }
}

new B();

我想用https://github.com/Railk/T3S 和/或https://github.com/lavrton/sublime-better-typescript 编译这些文件

问题是如果我编译文件b.ts,无论我是否将a.ts添加到项目中,它都看不到文件a.ts。 所以,我写了一个 compile.bat 文件(我把它用作构建系统),它将文件收集到一个 txt 中,然后我使用这样的命令:

dir DIRECTORY\*.ts /b /s > DIRECTORY\ts-files.txt
tsc @DIRECTORY\ts-files.txt --outDir OUTPUT_DIRECTORY

效果很好(所有 js 文件都编译得很好),但是当我在编辑器中看到源代码时,它仍然无法识别其他文件中的引用。

所以,我有一个 buld 系统,效果很好。如果我使用 T3S,效果很好,但只有一个文件,没有任何外部参考。

我该如何解决这个问题?

【问题讨论】:

  • 使用参考注释是否有助于解决您的问题 - 它告诉编译器在哪里查找依赖项:///<reference path="a.ts" />
  • 是的,可以解决这个问题。有趣的是,当我使用 webstorm 时,它不需要引用 cmets。
  • WebStorm 和 Visual Studio 都会自动扫描项目中的文件 - 这是一个额外的 IDE 功能,而不是直接的 TypeScript 编译器功能:)
  • 啊,我明白了,我以为这是未知的魔法,谢谢!

标签: typescript sublimetext3


【解决方案1】:

当项目增长时,您通常会得到循环依赖/引用:A 引用 B 引用 C 引用 A...

我们发现的唯一方法是编写一个定义文件,例如 definitions.d.ts,它引用 所有 Typescript 文件

///<reference path="A.ts" />
///<reference path="B.ts" />
///<reference path="C.ts" />

然后,在每个 Typescript 文件中,有一个对 definitions.d.ts 的单一引用

///<reference path="definitions.d.ts" />

编辑

作为替代方案,移至 require:对于 CommonJs“风格”,使用 tsc 标志

--module commonjs

在 Typescript 文件中,import 资源

import A = require('./A')  //no .ts in the name

【讨论】:

  • 谢谢,我想这就是我想尝试的方式!
【解决方案2】:

并非所有集成开发环境都会自动扫描 TypeScript 文件。

Visual Studio 和 WebStorm 会将项目中的所有文件视为隐式引用(如果您想要引用文件,这本身可能会导致问题 - 但大多数时候它是一个有用的功能)。

在这些 IDE 之外,您需要提供参考 cmets:

///<reference path="a.ts" />

例如,如果您从命令行手动运行或使用运行命令的工具。

【讨论】:

    猜你喜欢
    • 2018-12-15
    • 1970-01-01
    • 2019-06-21
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多