' type'的正确位置在哪里?声明?

时间:2015-04-01 23:14:47

标签: typescript typescript1.4

我最近一直在使用TypeScript 1.4,我正在尝试了解type aliases via the type keyword的正确用法。为了添加一些上下文,我有一堆我用这种方式构建的TypeScript文件:

module A.B.C {
    export class MyClass {
        // ...
    }
}

为了避免使用var thing:A.B.C.MyClass,我一直试图以各种方式使用type关键字,每个都有自己的问题:

文件顶部。

我做的第一次尝试是将这些语句放在文件的顶部,在module语句之上:

type MyClass = A.B.C.MyClass;

module D.E {
    // Yada yada.
}

但是,当我在另一个文件中执行此操作时,编译器并不喜欢我在两个文件中两次使用相同的语句。

在模块内。

我的下一个想法是将声明放在模块定义中:

module D.E {
    type MyClass = A.B.C.MyClass;

    // ...
}

这种方法运作良好一段时间,但在尝试将new MyClass分配给类成员时遇到了某种歧义错误。例如:

module D.E {
    type MyClass = A.B.C.MyClass;

    export class AnotherClass {
        private thing:MyClass;

        constructor() {
            this.thing = new MyClass(); // Error is here.
        }
    }
}

结果:

  

指定的表达式类型D.E.MyClass无法分配给类型A.B.C.MyClass

显然,我正在以错误的方式接近这一点。实现我想做的事情的正确方法是什么?我怀疑我的第一次尝试更接近正确,并且那些type语句只属于某个文件?

1 个答案:

答案 0 :(得分:1)

  

然而,一旦我在另一个文件中执行此操作,编译器就不喜欢我在两个文件中两次使用相同的语句。

不要再做两次。只需在像globals.ts

这样的地方做一次

BTW:我建议您不要使用内部模块(heres why),我建议您使用外部模块https://www.youtube.com/watch?v=KDrWLMUY0R0

更新

请勿将type用于代码中要使用的内容。仅对type声明空间中的内容使用type annotation

要对别名进行别名,您需要使用var。如下所示:

module a.b {
    export class Foo {
        constructor(a, b) {
        }
    }
}

var Bar = a.b.Foo;

var b = new Bar(1, 2);

我再也无法警告你使用--out的危险。