ember-cli: 3.5.0
node: 8.12.0
os: win32 x64
tsc: 3.1.3
#app/models/node.ts
import DS from 'ember-data';
export default class Node extends DS.Model.extend({
name: DS.attr(),
parent: DS.belongsTo('node', { inverse: "children" }),
children: DS.hasMany('node', { inverse: "parent" }),
}) {
}
declare module 'ember-data/types/registries/model' {
export default interface ModelRegistry {
'node': Node;
}
}
Self-referencing models should work, maybe specified differently?
app/models/node.ts(3,22): error TS2506: 'Node' is referenced directly or indirectly in its own base expression.
Discussing this on discord, this issue was resolved by using ember-decorators like this:
import { attr, belongsTo, hasMany } from '@ember-decorators/data';
export default class Node extends DS.Model {
@belongsTo('node', { inverse: 'children' }) parent!: DS.PromiseObject<Node> & Node;
@hasMany('node', { inverse: 'parent' }) children!: DS.PromiseManyArray<Node>;
}
declare module 'ember-data/types/registries/model' {
export default interface ModelRegistry {
'node': Node;
}
}
Thank you, @Bouke, for both opening this issue and documenting a solution here so other people who search will find it! 馃槏
Most helpful comment
Thank you, @Bouke, for both opening this issue and documenting a solution here so other people who search will find it! 馃槏