输入没有完整名称空间

时间:2013-03-21 07:36:19

标签: typescript

有两个打字稿文件:

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”):

  
    

当前范围中不存在名称“人”

  

如何实现此语法或类似语法,以避免长命名空间?

2 个答案:

答案 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 

然而,减少字母数量的解决方案是史蒂夫提到的继承。