微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法“提取” TypeScript 接口属性的类型?

如何解决有没有办法“提取” TypeScript 接口属性的类型?

以前不可能,但幸运的是现在可以了,因为TypeScript 版本 2.1。它已于 2016 年 12 月 7 日发布,它引入了 ,也称为 。

语法看起来与元素访问完全一样,但它是代替类型编写的。所以在你的情况下:

interface I1 {
    x: any;
}

interface I2 {
    y: {
        a: I1,
        b: I1,
        c: I1
    }
    z: any
}

let myVar: I2['y'];  // indexed access type

现在myVarI2.y.

在TypeScript Playground中查看。

解决方法

假设库 X 有一个类型文件,其中包含一些接口。

interface I1 {
    x: any;
}

interface I2 {
    y: {
        a: I1,b: I1,c: I1
    }
    z: any
}

为了使用这个库,我需要传递一个与I2.y. 我当然可以在我的源文件中创建相同的界面:

interface MyInterface {
    a: I1,c: I1
}

let myVar: MyInterface;

但是随后我承担了将其与库中的更新保持同步的负担,而且它可能非常大并导致大量代码重复。

因此,有没有办法“提取”接口的这个特定属性的类型?类似于let myVar: typeof I2.y(不起作用并导致“找不到名称 I2”错误)。


编辑 :在 TS Playground 中玩了一会儿后,我注意到以下代码完全符合我的要求:

declare var x: I2;
let y: typeof x.y;

但是,它需要x声明一个冗余变量。我正在寻找一种在没有该声明的情况下实现这一目标的方法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。