9

有两个打字稿文件:

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

当前范围内不存在名称“Person”

我怎样才能实现这种或类似的语法,以避免长名称空间?

4

2 回答 2

6

在 TypeScript 中,类型注释必须与编译器已知的类型相关。您不能只使用变量作为类型。您给模块的别名是您在import语句中指定的别名 - 因此您可以在此处从长命名空间别名为短别名:

import alias = module("My/Long/Module/Path");

但是你必须使用别名。

要获得您正在寻找的结果,您将不得不使用扩展模块类方法的稍微疯狂的本地类:

import myModule = module("MyModule");

class Person extends myModule.Person {
}

var x: Person;
于 2013-03-21T11:05:56.147 回答
2

我认为您应该得到的错误是“类型未定义”但是目前的错误是“当前范围内不存在该名称”。这是因为变量和类型的单独声明空间。不能在类型名称部分中引用变量。

您可以在此处以简单的单个文件案例看到它:

module M
{
    export interface P {}
}

import im = M; 
var foo1:im.P; // Okay 

var vm = M;
var foo2:vm.P; // Error 

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

于 2013-03-22T05:09:14.520 回答