3

我有这个代码:

const {items} = this.props;

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

我不想这样做:

const items: ItemsInterface = this.props.items

可能的?

4

1 回答 1

2

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

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

不过,如果您真的希望在解构表达式中赋予类型,有几种方法。

  1. 最简单的是将类型断言应用于表达式的右侧

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

    或等效地

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

    当然,这是冗长的,但它是清晰、正确和明显的。

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

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

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

  3. 如果您偶然在解构表达式中指定了默认值,您实际上可以指定内联类型。

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

或等效地

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

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

我更喜欢第一个选项,因为在这里更改现有值的类型this.props并应用断言比在接收声明中添加类型注释items更简洁,因为后者没有给读者提供直觉类型正在手动调整。

于 2018-04-05T18:32:22.067 回答