diff --git a/package.json b/package.json index f4fa93616..99e63d889 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,11 @@ { "private": true, "dependencies": { - "lerna": "^2.4.0", + "cross-env": "^5.1.1", "husky": "^0.13.4", - "prettier": "^1.4.4", + "lerna": "^2.4.0", "lint-staged": "^3.6.1", - "cross-env":"^5.1.1" + "prettier": "^1.4.4" }, "scripts": { "clean": "lerna clean", diff --git a/packages/mobx-state-tree/package.json b/packages/mobx-state-tree/package.json index 390b23a0a..e044c79f7 100644 --- a/packages/mobx-state-tree/package.json +++ b/packages/mobx-state-tree/package.json @@ -55,7 +55,7 @@ "tape": "^4.6.0", "tslib": "^1.7.1", "tslint": "^3.15.1", - "typescript": "^2.4.2" + "typescript": "^2.7.1" }, "peerDependencies": { "mobx": "^3.1.15" diff --git a/packages/mobx-state-tree/src/types/complex-types/model.ts b/packages/mobx-state-tree/src/types/complex-types/model.ts index 2b35decff..f4ec55e3f 100644 --- a/packages/mobx-state-tree/src/types/complex-types/model.ts +++ b/packages/mobx-state-tree/src/types/complex-types/model.ts @@ -191,7 +191,7 @@ export class ModelType extends ComplexType implements IModelType( properties: { [K in keyof TP]: IType } & { [K in keyof SP]: IType } - ): IModelType { + ): IModelType, T & TP> { return this.cloneAndEnhance({ properties } as any) } @@ -457,7 +457,7 @@ export interface IModelType extends IComplexType { props: { [K in keyof TP]: IType | TP[K] } & { [K in keyof SP]: IType | SP[K] } ): IModelType, T & TP> - //props

(props: IModelProperties

): IModelType, T & P> + props

(props: IModelProperties

): IModelType, T & P> views(fn: (self: T & IStateTreeNode) => V): IModelType actions( fn: (self: T & IStateTreeNode) => A @@ -480,11 +480,12 @@ export type Snapshot = { [K in keyof T]?: Snapshot | any // Any because we cannot express conditional types yet, so this escape is needed for refs and such.... } +export function model(): IModelType, T> +export function model(properties: IModelProperties): IModelType, T> export function model( name: string, - properties?: IModelProperties -): IModelType, T> -export function model(properties?: IModelProperties): IModelType, T> + properties: IModelProperties +): IModelType, T> /** * Creates a new model type by providing a name, properties, volatile state and actions. * @@ -493,10 +494,11 @@ export function model(properties?: IModelProperties): IModelType(...args: any[]): IModelType, any> { + const name = typeof args[0] === "string" ? args.shift() as string : "AnonymousModel" const properties = args.shift() || {} - return new ModelType({ name, properties }) + const config = { name: name as string, properties } as ModelTypeConfig + return new ModelType(config) } export function compose( diff --git a/packages/mobx-state-tree/src/utils.ts b/packages/mobx-state-tree/src/utils.ts index 723a0bb63..f4f9607a9 100644 --- a/packages/mobx-state-tree/src/utils.ts +++ b/packages/mobx-state-tree/src/utils.ts @@ -51,8 +51,8 @@ export function extendKeepGetter(a: any, ...b: any[]) { for (let i = 0; i < b.length; i++) { const current = b[i] for (let key in current) { - const descriptor = Object.getOwnPropertyDescriptor(current, key) - if ("get" in descriptor) { + const descriptor = Object.getOwnPropertyDescriptor(current, key) || {} + if (descriptor && "get" in descriptor) { Object.defineProperty(a, key, { ...descriptor, configurable: true }) continue } diff --git a/yarn.lock b/yarn.lock index 52ac8ca5e..3858db96d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10503,6 +10503,10 @@ typescript@^2.4.2: version "2.5.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.5.3.tgz#df3dcdc38f3beb800d4bc322646b04a3f6ca7f0d" +typescript@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.7.1.tgz#bb3682c2c791ac90e7c6210b26478a8da085c359" + ua-parser-js@^0.7.9: version "0.7.17" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac"