I'm using Typescript 2.3.4
, Node.JS 8.0.0
, and the Feathers framework (version 2.1.1
). I am making an express route that uses a service, and when I try to use the service after grabbing the singleton instance on the feathers app, Typescript is throwing an error TS2532: Object is possibly 'undefined' error, even after an explicit type guard.
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');
}
}
}
I've also tried writing someService!.create...
but that didn't work either.
I'm using Typescript 2.3.4
, Node.JS 8.0.0
, and the Feathers framework (version 2.1.1
). I am making an express route that uses a service, and when I try to use the service after grabbing the singleton instance on the feathers app, Typescript is throwing an error TS2532: Object is possibly 'undefined' error, even after an explicit type guard.
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');
}
}
}
I've also tried writing someService!.create...
but that didn't work either.
- What is the type of someService? What line does the error occur on? – dbandstra Commented Jun 9, 2017 at 20:50
-
Error is on
let data = someService.create({test: 'hello'});
line, andsomeService
is defined as aService<any>
type as per theapp.service<any>('predefined-service')
call (that type es from feathers). Feathers services work by first registering them. – Sean Newell Commented Jun 9, 2017 at 20:53
1 Answer
Reset to default 15From the Feathers typings:
interface Service<T> extends events.EventEmitter {
create?(data: T | T[], params?: Params, callback?: any): Promise<T | T[]>;
The create
method itself is optional (for whatever reason). If you're sure the method exists you could put the !
operator after, like this:
let data = someService.create!({test: 'hello'});