Reactjs 使用redux orm和TypeScript定义模型类
我在JS中使用了reduxORM,一切正常,但我在将代码从JS转换为TypeScript时遇到了问题 我已经在我的文件夹模型类中实现了方法render(),但是TS transpiler说: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}) } 静态获取字
类型“文件夹”上不存在属性“名称”
如何指示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)超过了最大调用堆栈大小。