2015-01-10 27 views
7

Tôi đang sử dụng các loại vật liệu làm trong Typescript tôi:nguyên cảo: Reference subtype của kiểu định nghĩa (giao diện)

interface ExerciseData { 
    id : number; 
    name : string; 
    vocabulary : { 
     from : string; 
     to : string; 
    }[]; 
} 

Bây giờ tôi muốn tạo một biến mà là cùng loại như các thuộc tính vocabulary, hãy thử các cách sau:

var vocabs : ExerciseData.vocabulary[]; 

Nhưng điều đó không hiệu quả. Có thể tham chiếu đến một loại phụ bằng cách nào đó không? Hoặc tôi sẽ phải làm một cái gì đó như thế này?

interface ExerciseData { 
    id : number; 
    name : string; 
    vocabulary : Vocabulary[]; 
} 

interface Vocabulary { 
     from : string; 
     to : string; 
} 

var vocabs : Vocabulary[]; 

Cảm ơn rất nhiều gợi ý.

+0

Bạn là chính xác. Bạn nên làm những gì bạn đã làm trong khối mã cuối cùng. –

+0

Cảm ơn bạn @WayneEllery - vì vậy bạn sẽ nói điều này chắc chắn là không thể? –

+0

Vâng. Bạn thực sự nên khai báo các loại của bạn. –

Trả lời

2

Không chính xác những gì bạn muốn nhưng bạn có thể hack xung quanh điều này với từ khóa typof nhưng chỉ khi bạn có var được khai báo là loại giao diện của bạn như dưới đây. Lưu ý rằng tôi nghĩ rằng những gì bạn đã làm trong codeblock cuối cùng của bạn là tốt hơn rất nhiều :)

interface ExerciseData { 
    id : number; 
    name : string; 
    vocabulary : { 
     from : string; 
     to : string; 
    }[]; 
} 
var x: ExerciseData; 
var vocabs : typeof x.vocabulary[]; 
+0

Hmmm, đó là một khả năng khá thú vị thực sự - mặc dù không hoàn toàn những gì tôi đang tìm kiếm. Cảm ơn bạn đã đề cập đến nó. –

4

Kể từ nguyên cảo 2.1 bạn có thể làm như sau sử dụng loại tra cứu:

let vocabs: ExerciseData['vocabulary'][]; 
+0

Bất kỳ cách nào để làm điều này một cách thực tế? Giống như trong JS ExerciseData [xxx] [] – xperiments

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