在类型保护错误TS2532之后,Typescript对象可能未定义

Sea*_*ell 9 javascript node.js typescript feathersjs

我正在使用Typescript 2.3.4,Node.JS 8.0.0和Feathers框架(版本2.1.1).我正在制作一个使用服务的快速路线,当我在抓取羽毛应用上的单例实例后尝试使用该服务时,Typescript会抛出错误TS2532:对象可能是"未定义"错误,即使在显式类型保护之后.

routes.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');
      }
    }
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过写作,someService!.create...但这也不起作用.

感谢阅读,任何帮助赞赏<3 <3

dba*_*tra 14

羽毛类型:

interface Service<T> extends events.EventEmitter {

  create?(data: T | T[], params?: Params, callback?: any): Promise<T | T[]>;
Run Code Online (Sandbox Code Playgroud)

create方法本身是可选的(无论出于何种原因).如果您确定该方法存在,您可以将!操作符放在后面,如下所示:

let data = someService.create!({test: 'hello'});
Run Code Online (Sandbox Code Playgroud)