9

次の 2 つの 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"):

「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 

ただし、文字数を減らすための解決策は、Steve が述べたように継承です。

于 2013-03-22T05:09:14.520 に答える