我有两个需要了解彼此成员的课程。
在C ++中我会使用前向声明。
我必须在打字稿中做些什么?
答案 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()
}
}
}