使用接口销毁对象

destruct object with interface

我有这个代码:

const {items} = this.props;

但是,我需要将接口设置为 items 常量

我不想这样做:

const items: ItemsInterface = this.props.items

可能吗?

正如 Oblosys 在他的评论中所述,首选方法应该是解构类型良好的源对象并依赖类型推断。

类型注释语法与解构语法交互笨拙且不方便。

不过,如果您真的想在解构表达式中指定一个类型,有几种方法。

  1. 最简单的方法是在表达式的右侧应用类型断言

    const {items} = <{items: ItemsInterface}>this.props;
    

    或等效

    const {items} = this.props as {items: ItemsInterface};
    

    当然这很冗长,但是很清楚、正确、显而易见。

  2. 也许更接近您的直觉,您可以像其他任何操作一样使用类型注释指定解构表达式的类型。

    const {items}: {items: ItemsInterface} = this.props;
    

    我个人觉得这很尴尬,而且有点难以阅读。类型注释被归于未命名的表达式 {items}.

  3. 如果你是顺便在解构表达式中指定了一个默认值,实际上你可以指定类型inline .

    const {items = <ItemsInterface>{}} = this.props;
    

或等效

    const {items = {} as ItemsInterface} = this.props;

在任何情况下,都无法避免重复名称 items,除非您使用默认值进行初始化。

我更喜欢第一个选项,因为更改现有值的类型更清晰,这里 this.props,对该值应用 断言 比在接收声明中添加一个类型 annotation,这里是 items,因为后者没有向 reader 提供手动调整类型的直觉。