2013-06-27 43 views
5

Tôi đã tạo một biến trong tệp .ts không có mô-đun hoặc lớp. Nó hầu như trông giống như một tệp JavaScript đơn giản. Tôi muốn biến này có thể truy cập trong tệp .ts khác bên trong của một lớp bên trong một biến.Biến toàn cục Typescript trên các tệp

Vì vậy, ví dụ tôi có:

foo.ts

var foo = "some stuff"; 

bar.ts

module Bar { 
    export class BarClass { 
     function getFoo() { 
      return foo; 
     } 
    } 
} 

Tôi không chắc chắn đây là cách tốt nhất để làm nó. Tôi đã thử bằng cách sử dụng window.bar toàn cầu nhưng điều đó dường như không hoạt động. Tôi mới vào TypeScript nhảy vào một codebase lớn hơn vì vậy hãy cho tôi biết nếu bạn cần thêm bất kỳ thông tin nào về bất kỳ điều gì.

Cảm ơn!

Trả lời

8

Tệp TypeScript không biết về bất kỳ điều gì bạn đã thực hiện trong các tệp TypeScript khác trừ khi chúng có tham chiếu đến chúng. Vì vậy, ở đầu bar.ts bạn nên có một dòng

/// <reference path="foo.ts" /> 
+2

Tôi có cần phải thực hiện 'declare var foo: any;' quá không? – Nolski

+1

Không. Tuyên bố là để đảm bảo trình biên dịch rằng một cái gì đó sẽ tồn tại, mà nó không biết khác. Thường một thứ được tải bởi thư viện của bên thứ 3. Trình biên dịch sẽ biết về foo vì nó sẽ có một tham chiếu đến tệp mà nó được tạo ra. –

+0

Tuyệt vời. Câu trả lời này đã giúp tôi giải quyết rất nhiều vấn đề. Cảm ơn! – Nolski

0

Từ câu hỏi của bạn, không chắc chắn nếu nó là một bộ sưu tập, IDE hay runtime vấn đề mà bạn đã có. Tuy nhiên, tôi nghĩ rằng tôi muốn chia sẻ cách tốt nhất để tránh một số vấn đề này với globals là tạo tệp "loại" của riêng bạn và liệt kê nó trong thuộc tính typeRoots trong số tsconfig.json của bạn.

Ví dụ: điều tôi đã làm trong quá khứ là tạo lối tắt tới console.log cũng có màu sắc thư với kiểu tôi muốn. Giống như rất ...

const pretty = (style: string, ...anything) => { 
    anything.forEach(something => 
    console.log(`%c ${something} `, style)); 
    return moment().format('[Logged @] HH:MM:SS'); 
} 

Vì vậy, tôi không cần phải declare var pretty trong mỗi TS tập tin tôi sử dụng nó, tôi muốn tạo

... 
declare function pretty(style: string, ...anything); 
... 

Và sau đó trong tsconfig.json tôi

{ 
    "compilerOptions": { 
    ... 
    "typeRoots": ["src/myTypes"] 

Vì vậy, trong trường hợp của bạn, nếu foo là một var mà bạn biết sẽ có trong thời gian chạy, bạn có thể chỉ cần declare var foo: string; trong tệp loại của mình, liệt kê nó trong typeRoots và sử dụng của bạn nó vui vẻ trong tất cả các tập tin dự án của bạn mà không cần thêm bất kỳ cấu hình nào.

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