在 TypeScript 中定义 js-data 资源
Define js-data resource in TypeScript
是否可以使用 TypeScript 创建 js-data 资源定义class?
总的来说,我想要的是对计算 属性 和实例方法定义提供完整的类型支持。
像这样的东西会很棒:
class SomeModel
{
public someBusinessModelValue = 'foo';
public someMoreValues = 'bar';
public get someComputedProperty()
{
return this.someBusinessModelValue + someMoreValues;
}
public instanceMethod(param: string)
{
return this.someMoveValues.search(param);
}
}
然后
DS.defineResource(fromClass('name', '/endpoint', 'idAttr', SomeModel));
或更进一步定义它,如
class SomeModelStore extends SomeModel
{
name = 'name';
endpoint = 'endpoint';
idAttribute = 'idAttr';
relations =
{
//[...]
}
}
并像
一样使用它
DS.defineResource(SomeModelStore);
请注意,这些只是我希望它看起来像的一些想法,我知道它可能不会完全像那样工作。
JSData2.x
答案是肯定的,有点。在 JSData 2.x 中创建资源定义不是很灵活,但是您 可以 提供构造函数(通过 useClass
选项)以在记录实例化期间使用。
这里有一个例子:http://plnkr.co/edit/vNCoC8?p=info and the useClass
documentation: http://www.js-data.io/docs/dsdefaults#useclass
JSData 3.x
在 JSData 3.x 中你可以扩展各种 类:
import { DataStore, Mapper, Record } from 'js-data';
class CustomMapper extends Mapper {
// ...
}
const store = new DataStore({
mapperClass: CustomMapper
});
class BaseCustomRecord extends Record {
// ...
}
store.defineMapper('user', {
recordClass: class UserRecord extends BaseCustomRecord { /*...*/ }
});
store.defineMapper('post', {
recordClass: class PostRecord extends BaseCustomRecord { /*...*/ }
});
store.defineMapper('comment', {
recordClass: class CommentRecord extends BaseCustomRecord { /*...*/ }
});
// etc. etc.
这里有一些插件显示使用 JSData 3.x 扩展了一些 类:
并且 API 文档在扩展 类 时是一个方便的资源:http://api.js-data.io/js-data/latest/index.html
是否可以使用 TypeScript 创建 js-data 资源定义class?
总的来说,我想要的是对计算 属性 和实例方法定义提供完整的类型支持。
像这样的东西会很棒:
class SomeModel
{
public someBusinessModelValue = 'foo';
public someMoreValues = 'bar';
public get someComputedProperty()
{
return this.someBusinessModelValue + someMoreValues;
}
public instanceMethod(param: string)
{
return this.someMoveValues.search(param);
}
}
然后
DS.defineResource(fromClass('name', '/endpoint', 'idAttr', SomeModel));
或更进一步定义它,如
class SomeModelStore extends SomeModel
{
name = 'name';
endpoint = 'endpoint';
idAttribute = 'idAttr';
relations =
{
//[...]
}
}
并像
一样使用它DS.defineResource(SomeModelStore);
请注意,这些只是我希望它看起来像的一些想法,我知道它可能不会完全像那样工作。
JSData2.x
答案是肯定的,有点。在 JSData 2.x 中创建资源定义不是很灵活,但是您 可以 提供构造函数(通过 useClass
选项)以在记录实例化期间使用。
这里有一个例子:http://plnkr.co/edit/vNCoC8?p=info and the useClass
documentation: http://www.js-data.io/docs/dsdefaults#useclass
JSData 3.x
在 JSData 3.x 中你可以扩展各种 类:
import { DataStore, Mapper, Record } from 'js-data';
class CustomMapper extends Mapper {
// ...
}
const store = new DataStore({
mapperClass: CustomMapper
});
class BaseCustomRecord extends Record {
// ...
}
store.defineMapper('user', {
recordClass: class UserRecord extends BaseCustomRecord { /*...*/ }
});
store.defineMapper('post', {
recordClass: class PostRecord extends BaseCustomRecord { /*...*/ }
});
store.defineMapper('comment', {
recordClass: class CommentRecord extends BaseCustomRecord { /*...*/ }
});
// etc. etc.
这里有一些插件显示使用 JSData 3.x 扩展了一些 类:
并且 API 文档在扩展 类 时是一个方便的资源:http://api.js-data.io/js-data/latest/index.html