Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 使用redux orm和TypeScript定义模型类_Reactjs_Typescript_Redux_Redux Orm - Fatal编程技术网

Reactjs 使用redux orm和TypeScript定义模型类

Reactjs 使用redux orm和TypeScript定义模型类,reactjs,typescript,redux,redux-orm,Reactjs,Typescript,Redux,Redux Orm,我在JS中使用了reduxORM,一切正常,但我在将代码从JS转换为TypeScript时遇到了问题 我已经在我的文件夹模型类中实现了方法render(),但是TS transpiler说: 类型“文件夹”上不存在属性“名称” 如何指示TypeScript文件夹实例中存在name属性? 接口IFolder{ id:编号; 名称:字符串; 家长:任何; } 导出类文件夹扩展模型{ 静态获取modelName(){ 返回“文件夹”; } 获取渲染(){ 返回({this.name}) } 静态获取字

我在JS中使用了reduxORM,一切正常,但我在将代码从JS转换为TypeScript时遇到了问题

我已经在我的文件夹模型类中实现了方法render(),但是TS transpiler说:

类型“文件夹”上不存在属性“名称”

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

接口IFolder{
id:编号;
名称:字符串;
家长:任何;
}
导出类文件夹扩展模型{
静态获取modelName(){
返回“文件夹”;
}
获取渲染(){
返回({this.name}

) } 静态获取字段(){ 返回{ id:attr(), 名称:attr(), 父项:fk('文件夹','子项') }; } }
您可以在
类文件夹中重复所有
IFolder

export class Folder extends Model<ModelFields, IFolder> implements IFolder {
    id: number;
    name: string;
    parent: any;
...
导出类文件夹扩展模型实现IFolder{
id:编号;
名称:字符串;
家长:任何;
...
或者使用此技巧不重复代码:

class IFolder extends Model<ModelFields, IFolder> {
    id: number;
    name: string;
    parent: any;
}

export class Folder extends IFolder {

类IFolder扩展了模型{
id:编号;
名称:字符串;
家长:任何;
}
导出类文件夹扩展IFolder{

Babel Transfilation output在模型原型链中引入了额外的属性描述符,这些描述符在架构注册期间干扰了由redux orm安装的描述符。这是
超过最大调用堆栈大小
错误的根本原因

@types/redux orm
对于
redux orm:0.13
的工作方式有点不同

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

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

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')
    }
}
接口文件夹字段{
id:编号;
名称:字符串;
父:文件夹
儿童:QuerySet
}
导出类文件夹扩展模型{
静态modelName='Folder'作为常量;
静态字段={
id:attr(),
名称:attr(),
父项:fk('文件夹','子项')
}
}

redux orm 0.14的类型很可能会利用声明合并来允许更干净的
模型
定义。

谢谢@aquz我已经尝试过这个解决方案,但是当我这样做的时候,当我想使用这行创建一个文件夹的实例时,我得到了这个错误,在使用JS:Folder.create(sf)时,它可以正常工作
index.js:1375 RangeError:在新文件夹(index.tsx:107)的SessionBoundModel.set(Model.js:518)的SessionBoundModel.set[作为id](descriptors.js:25)的SessionBoundModel.update(Model.js:538)超过了最大调用堆栈大小。