有两个打字稿文件:
A.ts:
export class Person {
public name:string;
constructor(){}
}
和
B.ts:
import A = module("A");
var p: A.Person;
到目前为止一切正常。
但是,当我尝试为从A.ts导入的类型名称创建快捷方式时:
var Person = A.Person;
var pp: Person;
编译器抱怨(在线:“var pp:Person”):
当前范围中不存在名称“人”
如何实现此语法或类似语法,以避免长命名空间?
答案 0 :(得分:6)
在TypeScript中,类型注释必须与编译器已知的类型相关。您不能只使用变量作为类型。您为模块提供的别名是您在import
语句中指定的别名 - 因此您可以在此处将长名称空间的别名替换为短别名:
import alias = module("My/Long/Module/Path");
但是你做然后必须使用别名。
要获得您正在寻找的结果,您必须使用扩展模块类方法的稍微疯狂的本地类:
import myModule = module("MyModule");
class Person extends myModule.Person {
}
var x: Person;
答案 1 :(得分:2)
我认为 获取的错误是“未定义类型”但是当前错误是“当前范围中不存在该名称”。它是因为变量和类型的单独声明空间。无法在类型名称部分中引用变量。
您可以在一个简单的单个文件中看到它:
module M
{
export interface P {}
}
import im = M;
var foo1:im.P; // Okay
var vm = M;
var foo2:vm.P; // Error
然而,减少字母数量的解决方案是史蒂夫提到的继承。