TypeScript:类型定义的参考子类型(接口)

Mat*_*der 11 javascript typing typescript

我在我的TypScript中使用以下类型:

interface ExerciseData {
    id : number;
    name : string;
    vocabulary : {
        from : string;
        to : string;
    }[];
}
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个与属性类型相同的变量vocabulary,尝试以下方法:

var vocabs : ExerciseData.vocabulary[];
Run Code Online (Sandbox Code Playgroud)

但这不起作用.是否有可能以某种方式引用子类型?或者我必须做这样的事情?

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

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

var vocabs : Vocabulary[];
Run Code Online (Sandbox Code Playgroud)

非常感谢提示.

Dun*_*Luk 19

从TypeScript 2.1开始,您可以使用查找类型执行以下操作:

let vocabs: ExerciseData['vocabulary'][];
Run Code Online (Sandbox Code Playgroud)

  • 有什么办法可以动态地做到这一点吗?就像在 JS 练习数据[xxx][] (2认同)

Vla*_*kov 6

这些天我发现它的工作方式如下:

interface User {
  avatar: string;
}

interface UserData {
  someAvatar: User['avatar'];
}
Run Code Online (Sandbox Code Playgroud)

如果您不想导出所有内容,则非常有用。


Dic*_*ink 5

不完全是您想要的,但您可以使用typof 关键字解决此问题,但前提是您有一个声明为接口类型的var,如下所示。请注意,我认为您在上一个代码块中所做的要好得多:)

interface ExerciseData {
    id : number;
    name : string;
    vocabulary : {
        from : string;
        to : string;
    }[];
}
var x: ExerciseData;
var vocabs : typeof x.vocabulary[];
Run Code Online (Sandbox Code Playgroud)