V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
? Meteor
? JSLint - a JavaScript code quality tool
? jsFiddle
? D3.js
? WebStorm
推荐书目
? JavaScript 权威指南第 5 版
? Closure: The Definitive Guide
ClearMoki
V2EX  ?  JavaScript

求助,在实现一些方法中有什么优雅的方式,根据参数的类型/是否必传来校验

  •  1
     
  •   ClearMoki · 101 天前 · 1071 次点击
    这是一个创建于 101 天前的主题,其中的信息可能已经有所发展或是发生改变。

    腾讯云最新优惠活动来了:云产品限时1折,云服务器低至88元/年 ,点击这里立即抢购:9i0i.cn/qcloud,更有2860元代金券免费领取,付款直接抵现金用,点击这里立即领取:9i0i.cn/qcloudquan

    (福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

    interface Props {
    	a: string;
        b: number;
        c?: boolean;
    }
    
    const fun = ({a, b, c}: Props) => {
    	// 参数类型校验失败不执行后续, 比如 a/b 未传,或者 a/b/c 类型不正确
    	// TODO
    }
    

    请问有什么比较好的方法可以校验参数,如果校验失败就抛出异常,或者不执行 fun 后续操作 qaq

    8 条回复  ?  2024-01-19 15:56:23 +08:00
    mmdsun
        1
    mmdsun  
       101 天前
    不是很明白,这个代码不是 TypeScript 的么?传参不对,编译时应该有提示错误吧?难道是把 ESLint 全部关闭了?

    纯 js 的话可以用框架校验,编写 schema
    import * as Joi from "joi";
    const schema = Joi.object({
    a: Joi.string().required(),
    b: Joi.number().required(),
    c: Joi.boolean(),
    });

    const validation = schema.validate(props)
    mipawn
        2
    mipawn  
       101 天前
    如果是类的方法,可以考虑装饰器,如果是普通函数,可以往高阶函数方向尝试
    knives
        3
    knives  
       101 天前
    一种方案是,先写验证器,再使用验证器构造类型。如: https://github.com/colinhacks/zod
    lisongeee
        4
    lisongeee  
       101 天前
    这个得用 typescript 编译器宏,就是传入一个 typescript 类型,返回一个校验器 js 对象

    如果是 vite/webpack 可以用自定义 plugin 实现
    ClearMoki
        5
    ClearMoki  
    OP
       100 天前
    @mmdsun 是 ts ,但是希望不仅仅是编辑时候提示错误,也希望运行时如果不通过然后不执行后续
    ClearMoki
        6
    ClearMoki  
    OP
       100 天前
    @mipawn 感谢有考虑装饰器
    ClearMoki
        7
    ClearMoki  
    OP
       100 天前
    @lisongeee 感谢我尝试下,但是这边使用的 rspack ,类似的话想自己写一个传入类型然后返回结果
    Cheez
        8
    Cheez  
       100 天前
    那就 assert 一下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5766 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 02:51 · PVG 10:51 · LAX 19:51 · JFK 22:51
    Developed with CodeLauncher
    ? Do have faith in what you're doing.


    http://www.vxiaotou.com