2015-01-10 160 views
7

我用我TypScript以下类型的参考亚型:打字稿:类型定义(接口)

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

现在,我想创建一个变量是同一类型的属性vocabulary的,尝试以下内容:

var vocabs : ExerciseData.vocabulary[]; 

但这是行不通的。是否有可能以某种方式引用子类型?或者我会不得不这样做?

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

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

var vocabs : Vocabulary[]; 

非常感谢提示。

+0

你是正确的。你应该在最后的代码块中做你所做的。 –

+0

谢谢@WayneEllery--所以你会说这绝对不可能? –

+0

是的。无论如何,你应该真的声明你的类型。 –

回答

2

不完全是你想要的,但是你可以用typof关键字来解决这个问题,但前提是你有一个var声明为你的接口类型,如下所示。请注意,我想你在最后的代码块确实是好了很多:)

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

嗯,这确实是一个非常有趣的可能性 - 虽然不是我想要的。谢谢你提到它。 –

4

由于打字稿2.1,你可以做以下使用查找类型

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

任何方式做这个dinamically?就像JS ExerciseData [xxx] []一样 – xperiments