2013-03-21 39 views
9

Có hai file nguyên cảo:Loại tài liệu tham khảo mà không đầy đủ namespace

A.ts: 

export class Person { 
    public name:string; 
    constructor(){} 
} 

B.ts: 

import A = module("A"); 
var p: A.Person; 

Cho đến nay tất cả mọi thứ hoạt động tốt.

Tuy nhiên, khi tôi cố gắng để tạo ra một phím tắt cho tên loại được nhập khẩu từ các A.ts:

var Person = A.Person; 
var pp: Person; 

trình biên dịch phàn nàn (trên dòng: "var pp: Person"):

tên 'người' không tồn tại trong phạm vi hiện tại

Làm thế nào tôi có thể đạt được cú pháp này hoặc tương tự, để tránh các không gian tên dài?

+0

Tôi không biết làm thế nào để đạt được những gì bạn đang cố gắng để làm, tuy nhiên vấn đề bạn nhận được với thông báo viết tắt của bạn là người không phải là một loại TypeScript nhưng một tham chiếu đến một lớp. Do đó thay vì viết 'var pp: Person;' bạn có thể sử dụng 'var pp = new Person(); ' – thomaux

+0

Vì vậy, tôi có thể tạo một thể hiện của lớp nhưng tôi không thể khai báo một biến của lớp. Trình biên dịch sẽ có thể suy ra loại cho biến trong một trường hợp và không thể làm điều đó trong biến khác. Dường như với tôi một lỗi trong trình biên dịch. Dù sao ví dụ thứ hai ('var pp = new Person();') không hoạt động. Cảm ơn. – ads

Trả lời

6

Trong TypeScript, chú thích kiểu phải liên quan đến loại được biết đến trình biên dịch. Bạn không thể chỉ sử dụng biến làm loại. Bí danh của bạn cung cấp cho một module là một trong những bạn chỉ định trong báo cáo kết quả import - vì vậy bạn có thể bí danh từ một không gian tên dài để một tên viết tắt ở đây:

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

Nhưng bạn làm sau đó phải sử dụng bí danh.

Để có được kết quả mà bạn đang tìm kiếm, bạn sẽ phải sử dụng lớp địa phương hơi điên mở rộng phương thức của lớp mô-đun:

import myModule = module("MyModule"); 

class Person extends myModule.Person { 
} 

var x: Person; 
+0

Mở rộng lớp học quá nhiều cho mục đích của tôi. Tôi sẽ gắn với bí danh. Cảm ơn. – ads

2

Tôi nghĩ rằng lỗi bạn nên get là "Loại không được định nghĩa "Tuy nhiên hiện tại lỗi là" Tên không tồn tại trong phạm vi hiện tại ". Của nó vì không gian khai báo riêng biệt cho các biến và các loại. Biến không thể được tham chiếu trong phần tên loại.

Bạn có thể nhìn thấy nó trong một trường hợp tập tin duy nhất đơn giản ở đây:

module M 
{ 
    export interface P {} 
} 

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

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

Tuy nhiên các giải pháp để giảm số lượng các chữ cái là thừa kế như Steve đề cập.

Các vấn đề liên quan