首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于redux-orm和TypeScript的模型类定义

基于redux-orm和TypeScript的模型类定义
EN

Stack Overflow用户
提问于 2019-06-10 20:40:51
回答 2查看 672关注 0票数 3

我在JS中使用redux-orm,一切正常,但是我在将代码从JS转换到TypeScript时遇到了问题。

我已经在我的文件夹模型类中实现了呈现()方法,但是TS转发程序说:

Property 'name' does not exist on type 'Folder'

如何指示TypeScript文件夹实例中存在 name 属性?

代码语言:javascript
复制
interface IFolder{
    id: number;
    name: string;
    parent: any;
}

export class Folder extends Model<ModelFields, IFolder>{

    static get modelName() {
        return 'Folder';
    }

    get render(){
        return (<p>{this.name}</p>)
    }

    static get fields() {
        return {
            id: attr(),
            name: attr(),
            parent: fk('Folder', 'children')
        };
    }
}
EN

回答 2

Stack Overflow用户

发布于 2019-06-10 21:16:30

您可以在class Folder中重复所有的class Folder

代码语言:javascript
复制
export class Folder extends Model<ModelFields, IFolder> implements IFolder {
    id: number;
    name: string;
    parent: any;
...

或使用此技巧不重复代码:

代码语言:javascript
复制
class IFolder extends Model<ModelFields, IFolder> {
    id: number;
    name: string;
    parent: any;
}

export class Folder extends IFolder {
票数 0
EN

Stack Overflow用户

发布于 2019-07-19 15:49:40

Babel转换输出在模型原型链中引入了附加的属性描述符,干扰了redux在模式注册期间安装的描述符。这是导致Maximum call stack size exceeded错误的根本原因。

@types/redux-orm for redux-orm:0.13的工作方式有点不同。

提供的源代码缺少ModelFields,因此我将跳过这些内容,并假设预期的字段包括:

  • id -属性
  • 名称-属性
  • 父-自引用外键

示例:

代码语言:javascript
复制
interface FolderFields {
  id: number;
  name: string;
  parent: Folder
  children: QuerySet<Folder>
}

export class Folder extends Model<typeof Folder, FolderFields> {
    static modelName = 'Folder' as const;
    static fields = {
        id: attr(),
        name: attr(),
        parent: fk('Folder', 'children')
    }
}

redux 0.14的类型最有可能利用声明合并,以支持更干净的Model定义。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56533245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档