typescript - Typreferens utan fullt namnrym
Det finns två typescript-filer:
A.ts:
export class Person {
public name:string;
constructor(){}
}
och
B.ts:
import A = module("A");
var p: A.Person;
Hittills fungerar allt bra.
Men när jag försöker göra en genväg för typenamn importerad från A.ts :
var Person = A.Person;
var pp: Person;
kompilatorn klagar (på raden: "var pp: Person"):
Namnet 'Person' finns inte i det aktuella området
Hur kan jag uppnå detta eller liknande syntax, för att undvika långa namnrymder?
Svar #1
I TypeScript måste typannoteringen relatera till en typ som är känd för kompilatorn. Du kan inte bara använda variabler som typer. Aliaset du ger till ett modul är det som du anger i import-satsen - så du kan ge ett långnamns-namespace ett kort alias här:
import alias = module("My/Long/Module/Path");
Men du måste då använda aliaset.
För att få det resultat du letar efter skulle du behöva använda den lite galna lokala klassen som utökar modulklassmetoden:
import myModule = module("MyModule");
class Person extends myModule.Person {
}
var x: Person;
Svar #2
Jag tror att felet du bör få är "Typ ej definierad". Men för närvarande är felet "Namnet finns inte i det nuvarande omfånget". Det beror på separata deklarationsutrymmen för variabler och typer. En variabel kan inte refereras i en typnamnssektion.
Du kan se det i ett enkelt fall med en ensam fil här:
module M
{
export interface P {}
}
import im = M;
var foo1:im.P; // Okay
var vm = M;
var foo2:vm.P; // Error
Men lösningen för att minska antalet bokstäver är arv som Steve nämnde.
