【问题标题】:Extend Immutable.js field with custom interface in Typescript在 Typescript 中使用自定义接口扩展 Immutable.js 字段
【发布时间】:2019-10-24 17:25:20
【问题描述】:

假设属性名称是field,它基本上是一个不可变对象。所以field.get('') 或任何不可变的方法都存在于它上面。 但是,我为这个字段定义了自己的接口,它会覆盖或不自然地扩展不可变字段。

interface FieldProps  {
    field: {
        type: string;
        code: string;
        required: number;
    }
}

export default function FieldsComponent({ field = fromJS({}) }: FieldProps) {
    return (
        <>
            {field.get('type')}
        </>
    );
}

我的意思是,如果我执行field.get(''),它会显示Property 'get' does not exist on type '{ type: string; code: string; required: number; }

field 基本上是一个对象,因此可以使用 Javascript Object.prototype 方法。同样,不可变方法也应该可用。

只是想知道,为什么它不自动执行此操作?

如果不是,我想到的是使用不可变接口扩展我的自定义接口FieldProps。但是,我确信 immutable 不附带它自己的任何类型。

我怎样才能达到同样的效果?

【问题讨论】:

  • 很难理解你在问什么。你能试着改写一下,或者提供一些不能按照你想要的方式工作的代码吗?
  • 确实更新相同。
  • 不可变有它自己的类型。 github.com/immutable-js/immutable-js/blob/master/…
  • “只是想知道,为什么它不自动执行此操作?”为什么它会自动执行?你没有说你的接口与 Immutable 有任何关系,它只是一个 POJO。
  • @AvinKavish。差点跳过了。试图通过 Immutable.something 在 vscode 中查找自动导入的内容。无论如何,做interface FieldProps extends Map&lt;any, any&gt; {} 没有帮助。 `

标签: reactjs typescript immutable.js


【解决方案1】:

由于您希望field 成为带有一些添加键的映射,您可以通过以下方式创建类型交集。

interface FieldProps  {
    field: {
        type: string;
        code: string;
        required: number;
    } & Map<any, any>
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-26
    • 2016-07-06
    • 1970-01-01
    • 2020-06-09
    • 2020-04-09
    • 1970-01-01
    • 2016-12-18
    • 2013-08-03
    相关资源
    最近更新 更多