Búsqueda de sitios web

javascript - Error TS2532: El objeto de Typescript posiblemente está indefinido después de una comprobación de tipo


Estoy usando Typescript 2.3.4, Node.JS 8.0.0 y el framework Feathers (versión 2.1.1). Estoy creando una ruta de express que usa un servicio, y cuando intento usar el servicio después de obtener la instancia singleton en la aplicación de Feathers, Typescript lanza un error TS2532: Object is possibly 'undefined', incluso después de una verificación explícita de tipo.

rutas.ts

import feathers = require('feathers');

export default function(this: feathers.Application) {
  const app = this;

  app.post(
    '/donuts',
    async (req, res) => {
      const someService = app.service<any>('predefined-service');

      if(typeof someService === "undefined" || !authService) {
        res.redirect('/fail');
        return;
      }

      try {
        let data = someService.create({test: 'hello'});
        console.log(data);
        res.redirect('/success');
      } catch(err) {
        res.redirect('/fail');
      }
    }
}

También he intentado escribir someService!.create..., pero eso tampoco funcionó.

Respuesta #1

De las definiciones de Feathers:

interface Service<T> extends events.EventEmitter {

  create?(data: T | T[], params?: Params, callback?: any): Promise<T | T[]>;

El método create en sí es opcional (por cualquier motivo). Si estás seguro de que el método existe, podrías poner el operador ! después, así:

let data = someService.create!({test: 'hello'});

Artículos relacionados