javascript - Parse.com with TypeScript: Extend Parse.Object - Stack Overflow

Disclaimer: I know, Parse shuts down it's hosted service. Still, we will continue to use the frame

Disclaimer: I know, Parse shuts down it's hosted service. Still, we will continue to use the framework for a while, so this question is still important to us.

Recently, I started playing around with TypeScript and figured it might enhance my productivity for parse cloud code a lot. So I did some testing and was successfully able to use typescript to write cloud functions and so on. I even included the typing definition for parse via typings.

However, I still don't get one thing: How can I extend Parse.Object in a type-safe manner?

In normal js I would write:

var Foo = Parse.Object.extend("Foo", {
    // instance methods
}, {
    // static members
});

In order to get type safety, I would like to write something like this in typescript:

class Foo extends Parse.Object {
    // static members
    // instance methods
}

Is something like this possible? Am I missing out on something?

Disclaimer: I know, Parse. shuts down it's hosted service. Still, we will continue to use the framework for a while, so this question is still important to us.

Recently, I started playing around with TypeScript and figured it might enhance my productivity for parse cloud code a lot. So I did some testing and was successfully able to use typescript to write cloud functions and so on. I even included the typing definition for parse via typings.

However, I still don't get one thing: How can I extend Parse.Object in a type-safe manner?

In normal js I would write:

var Foo = Parse.Object.extend("Foo", {
    // instance methods
}, {
    // static members
});

In order to get type safety, I would like to write something like this in typescript:

class Foo extends Parse.Object {
    // static members
    // instance methods
}

Is something like this possible? Am I missing out on something?

Share Improve this question asked Jun 5, 2016 at 17:37 dpoetzschdpoetzsch 7651 gold badge7 silver badges20 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 8

Yes, this is possible. There are a few steps necessary for this. First, you need to pass the classname to the parent constructor

class Foo extends Parse.Object {
// static members
// instance methods
    constructor() {
        // Pass the ClassName to the Parse.Object constructor
        super('Foo');
    }

}

Furthermore, you need to register your class as an Parse object:

Parse.Object.registerSubclass('Foo', Foo);

After this, you can just use it for your query as:

var query = new Parse.Query(Foo);
query.find({
    success: obj: Foo[] => {
        // handle success case
    },
    error: error => {
        // handle error
    }
});

This also works for the new parse server open source project: https://github./ParsePlatform/parse-server

If someone like my stumble across the same question, here are my findings so far:

import Parse from "parse";

interface IBase {
  readonly createdAt?: Date;
  readonly updatedAt?: Date;
}

interface IMyInterface extends IBase {
  name: string;
  age?: number;
}

class MyClass extends Parse.Object<IMyInterface> {
  constructor(attributes: IMyInterface) {
    super("MyClass", attributes);
  }
}

export default MyClass;

You can then use it like this:

const newObject = new MyClass({ name: theName, age: theAge });

const result = await newObject.save();

const { attributes } = result;

console.log("Save result", attributes);

You will have full TS support for the attributes then.

Hopefully the work on https://www.npmjs./package/@parse/react will proceed quickly.

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744215711a4563545.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信