Javascript 类型保护错误TS2532后,Typescript对象可能未定义
我使用的是TypescriptJavascript 类型保护错误TS2532后,Typescript对象可能未定义,javascript,node.js,typescript,feathersjs,Javascript,Node.js,Typescript,Feathersjs,我使用的是Typescript2.3.4、Node.JS8.0.0,以及Feathers框架(版本2.1.1)。我正在创建一个使用服务的快速路由,当我在feathers应用程序上抓取singleton实例后尝试使用该服务时,Typescript抛出了一个错误TS2532:对象可能是“未定义”错误,即使在显式类型保护之后也是如此 路由。ts import feathers=require('feathers'); 导出默认函数(此:feathers.Application){ const-app
2.3.4
、Node.JS8.0.0
,以及Feathers框架(版本2.1.1
)。我正在创建一个使用服务的快速路由,当我在feathers应用程序上抓取singleton实例后尝试使用该服务时,Typescript抛出了一个错误TS2532:对象可能是“未定义”错误,即使在显式类型保护之后也是如此
路由。ts
import feathers=require('feathers');
导出默认函数(此:feathers.Application){
const-app=这个;
app.post(
“/甜甜圈”,
异步(请求、恢复)=>{
const someService=app.service(“预定义服务”);
if(someService的类型==“未定义”| |!authService){
res.redirect('/fail');
返回;
}
试一试{
让data=someService.create({test:'hello'});
控制台日志(数据);
res.redirect('/success');
}捕捉(错误){
res.redirect('/fail');
}
}
}
我也尝试过编写someService!.create…
,但也没有成功。来自:
someService的类型是什么?错误发生在哪一行?错误发生在
let data=someService.create({test:'hello'})上
line,而someService
被定义为服务。这是有道理的,一些服务不会公开create
或其他REST端点,因为用户定义的服务基本上可以做任何他们想做的事情。有人能解释一下在这种情况下“!”的工作吗?这只是说“我知道它将被‘定义’,所以不要担心给我显示任何警告……我不担心”是的,没错。它是在TS 2.0中添加的。他们称它为“类型断言运算符”或“非空断言运算符”(尽管它也适用于未定义)。它没有运行时效果。
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');
}
}
}
interface Service<T> extends events.EventEmitter {
create?(data: T | T[], params?: Params, callback?: any): Promise<T | T[]>;
let data = someService.create!({test: 'hello'});