typescript如何结构并确定不为undefined?

这一行代码,是node express后端解构request params的

 const {search,role,status,sort,pageNo,perPage} = req.query

在typescript 里面需要给前面的变量赋一个类型

 const {search,role,status,sort,pageNo,perPage}:TypeParams = req.query

在这里TypeParams必须全部弄成可选的字段,如下

type TypeParams={
    search?:string
    role?:string
    xxx
    xxx
}

如果没有可选,也就是"?",typescript立刻报错。Property search is missing in type "ParsedQs" but required in TypeParams.

问题:

  1. 这个报错信息是什么意思?parsedQs是哪里来的?
  2. 我用中间件给这些字段都已经提前赋值年,到了解构这一步,我明确知道它们是不可能undefined.如何写代码才能避免添加“?”,我不想要处理undefined,因为我明确知道不会underfined,都是有默认值的。
  3. 这个结构赋值的过程中,如何写代码才能省略给变量添加这个TypeParams?能够让typescript自己推断?

我是一个初学typescript的小白,希望大佬能够稍微详细的说说,让我从这个案例中能够感悟到更多typescript的工作机制。

感谢

阅读 2.7k
1 个回答

第一个问题TypeParams的意思是在ParsedQs类型里没有找到search属性,但在TypeParams里有。ParsedQs是Express框架里用来解析查询字符串的类型的
第二个问题用类型断言:

type TypeParams = {
  search: string;
  role: string;
  // ...
};
const { search, role, status, sort, pageNo, perPage } = req.query as unknown as TypeParams;

不想一个个加?;

type TypeParams = {
  [K in keyof typeof req.query]: NonNullable<typeof req.query[K]>;
};
const { search, role, status, sort, pageNo, perPage }: TypeParams = req.query;

第三个问题还是要写类型,还是用类型断言吧

logo
Microsoft
子站问答
访问
宣传栏