Чтение и запись с использованием Typescript в Firebase с Node.js - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь использовать Typescript в проекте Node.js / Express, потому что я предпочитаю строгую типизацию. Тем не менее, я новичок в Typescript.

Моя цель - сохранить данные с использованием Firebase и машинописи (не облачных функций Google).

Моя архитектура выглядит следующим образом:

  1. API POST для /people/create поставляется с JSON {name: "Guy"}
  2. Мы создаем Person объект в маршрутизаторе, затем отправляем его на DatabaseManager (write_person(person))
  3. DatabaseManager создает дружественный Firebase объект из объекта Person и отправляет его на FirebaseManager.write(FirebaseReferences.People, data)
  4. FirebaseManager сохраняет эти данные в firebase и возвращается к DatabaseManager, который возвращается к вызову маршрутизатора.

router.post('/person/create', (req: Request, res: Response) => {
    var person: Person = new Person(req.json...name);
    var uuid: String = DatabaseManager.write_person(person);
    res.send(uuid);
});

export module DatabaseManager {
    export function write_person(person: Person): String {
        return FirebaseManager.write(FirebaseReferences.People, person.to_dict());
    }
}

export enum FirebaseReferences {
    People = "/people"
}

export module FirebaseManager {

    export function write(ref: FirebaseReferences, data: object): String {
        try {
            var new_ref: firebase.database.Reference = db.ref(ref.toString());
            var uuid: String = new_ref.push(data).key;
            return uuid;
        } catch (error) {
            console.log("FirebaseManager, write(): " + error);
            throw error;
        }
    }
}

Я получаю следующую ошибку:

app/database_manager/FirebaseManager.ts:33:17 - error TS2322: Type 'string | null' is not assignable to type 'String'.
  Type 'null' is not assignable to type 'String'.

33             var uuid: String = new_ref.push(data).key;
                   ~~~~

[6:29:05 PM] Found 1 error. Watching for file changes.

1 Ответ

0 голосов
/ 12 января 2019

DatabaseReference.key возвращает обнуляемый тип, как указано string | null в сообщении об ошибке. Вы присваиваете String, который не может быть равен null, поэтому компилятор правильно делает вывод, что типы несовместимы.

Вам необходимо либо присвоить типу, допускающему значение NULL, либо преобразовать строку, которая может иметь значение NULL, в ненулевой тип.

назначить для обнуляемого типа

var uuid?: string = new_ref.push(data).key;

преобразовать ключ в ненулевую строку

let key = new_ref.push(data).key;
var uuid: string = key !== null ? key : "";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...