打字稿中的前向声明

时间:2013-01-17 20:14:12

标签: typescript forward-declaration

我有两个需要了解彼此成员的课程。

在C ++中我会使用前向声明。

我必须在打字稿中做些什么?

3 个答案:

答案 0 :(得分:5)

我不确定,但我认为您正试图解决一个不存在的问题。这在打字稿中完全有效:

class A{
    b=new B();
    func(){
        alert(this.b.member);
    }
}
class B{
    member="hello there";
}
var a=new A();
a.func();

如您所见,您可以在定义B类之前使用它,并从A类中访问其成员。这同样适用于函数:

var a=()=>{
    alert("function a");
    b();
}

var b=()=>{
    alert("function b");
}

a();

这应该编译好。请注意,只有在实际定义b后才能调用a。这不会起作用:

var a=()=>{
    alert("function a");
    b();
}
a();

var b=()=>{
    alert("function b");
}

你不需要在Typescript中使用前向声明。试想一下,它们是为您的代码自动生成的。

当您需要混合使用Javascript和Typescript时,问题会变得更加复杂。由于所有的Typescript代码都是由编译器静态类型检查的,因此连接Javascript框架并不那么简单。

所有变量,函数和"类"添加到您的范围需要在使用它们之前声明。让我们假设您需要为您的Typescript项目使用jQuery。所有jQuery魔法都是使用全局变量" $"但即使您已将jQuery脚本添加到您的html网站,您也无法引用" $"在你的Typescript代码中。这是使用声明文件的地方。通过添加行

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

到您的Typescript文件的顶部,您将通知编译器所有可用的jQuery代码。可以在此处找到最常用的Javascript框架的.d.ts文件:https://github.com/borisyankov/DefinitelyTyped

最后两行是.d.ts文件语法的一个很好的例子:

declare var jQuery: JQueryStatic;
declare var $: JQueryStatic;

现在编译器知道两个全局变量名为&#34; $&#34;和&#34; jQuery&#34;可以使用。此外,如果您使用VisualStudio,这些声明文件将提供出色的智能感知支持。

答案 1 :(得分:3)

对于接口,您需要一个前向声明

declare class F {} 

interface A {
    f:F ;
}

class F implement A {
    f:F ;
    init() { f=this; }
}

答案 2 :(得分:0)

如果我理解你,请尝试

declare var a: [class_name]

示例:

    module A {
        class B {
            foo() { }
        }
        declare var b: B;
        class C {
            t() {
                b.foo()
            }
        }
    }