前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Koa/Express+TypeScript扩展类型

Koa/Express+TypeScript扩展类型

作者头像
用户6256742
发布2022-07-11 13:10:36
7620
发布2022-07-11 13:10:36
举报
文章被收录于专栏:网络日志

在我们使用Koa或者Express进行开发时会经常使用中间件进行访问权限过滤或者属性加工,很多时候我们需要把中间件的属性传递给下一个路由函数,但是因为TS类型的限制我们无法直接获取扩展的元素或者无法获取正确的类型。本文讲解了在使用Koa/Express+TypeScript开发时如何扩展中间件上的属性。

tsconfig.json

在typeRoots中设置自定义类型的文件夹,我们将自定义的类型放在文件夹中

代码语言:javascript
复制
{
  "compilerOptions": {
    "typeRoots": ["types"]
  },
  "include": ["src"],
  "exclude": ["node_modules", "**/*.d.ts"]
}

设置:

 Koa:

这里只是举个例子,这样设置的话ctx上就可以直接获取到id和status属性

代码语言:javascript
复制
import type { Context } from "koa";
declare module "koa" {
  interface Context {
    /** 用户ID*/
    id?: number;
    /** 用户身份*/
    <span style="font-size: 16px; white-space: pre-wrap;">auth</span><span style="white-space: pre-wrap;">?: number;</span><br/>  }
}

类似这样,设置后后面的路由参数就可以直接拿到id了:

代码语言:javascript
复制
import type { Context, Next } from "koa";
function auth(status: number[]) {
  return (ctx: Context, next: Next) => {
    ctx.id = 1;
    next();
  };
}
export default auth;

Express:

代码语言:javascript
复制
import type {Express} from 'express'declare namespace Express {
  interface Request {
    authentication?: "admin" | "user";
    admin?: string; //管理员id
    userId?: string; //用户/管理员的id
    isAdmin?: boolean; //判断是否管理员
  }
}

基本和Koa的一样,这是我在之前写的Demo中直接复制的如果不行仿照Koa的修改一下即可。

Node.js
Node.js
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档