小智 6
对于接口,您确实需要一个前向声明
declare class F {}
interface A {
f:F ;
}
class F implement A {
f:F ;
init() { f=this; }
}
Run Code Online (Sandbox Code Playgroud)
我不确定,但是我认为您正在尝试解决一个不存在的问题。这在打字稿中是完全有效的:
class A{
b=new B();
func(){
alert(this.b.member);
}
}
class B{
member="hello there";
}
var a=new A();
a.func();
Run Code Online (Sandbox Code Playgroud)
如您所见,可以在定义类B之前使用它,并从类A中访问其成员。这同样适用于函数:
var a=()=>{
alert("function a");
b();
}
var b=()=>{
alert("function b");
}
a();
Run Code Online (Sandbox Code Playgroud)
这样应该可以编译。请注意,只有在实际定义b之后才能调用a。这行不通:
var a=()=>{
alert("function a");
b();
}
a();
var b=()=>{
alert("function b");
}
Run Code Online (Sandbox Code Playgroud)
您在Typescript中不需要前向声明。试想一下,它们是为您的代码自动生成的。
当您需要混合使用Javascript和Typescript时,问题变得更加复杂。由于您所有的Typescript代码都由编译器进行静态类型检查,因此与Javascript框架进行接口并不是那么简单。
必须先声明添加到作用域的所有变量,函数和“类”,然后才能使用它们。假设您的Typescript项目需要jQuery。所有的jQuery魔术都是通过全局变量“ $”完成的,但是即使您已将jQuery脚本添加到html站点中,也不能仅在Typescript代码中引用“ $”。这是使用声明文件的地方。通过添加行
/// <reference path="jquery.d.ts"/>
Run Code Online (Sandbox Code Playgroud)
在Typescript文件的顶部,您将所有可用的jQuery代码通知编译器。最常用的Javascript框架的.d.ts文件可以在这里找到:https : //github.com/borisyankov/DefinitelyTyped
最后两行是.d.ts文件语法的一个很好的示例:
declare var jQuery: JQueryStatic;
declare var $: JQueryStatic;
Run Code Online (Sandbox Code Playgroud)
现在,编译器知道可以使用两个名为“ $”和“ jQuery”的全局变量。而且,如果您使用的是VisualStudio,则这些声明文件将提供出色的智能感知支持。
归档时间: |
|
查看次数: |
5441 次 |
最近记录: |