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

typescript 如何生成 运行时 的类型检查

  •  
  •   ruandao · 2019-09-25 11:23:12 +08:00 · 3256 次点击
    这是一个创建于 1646 天前的主题,其中的信息可能已经有所发展或是发生改变。

    嗯,我知道 typescript 在编译成 js 的时候,把类型都去除了

    那么有没有什么编译选项,可以自动生成一个 类型检查 函数,检查输入的 any 类型的对象是不是符合某个指定接口

    主要是用在 http 返回的时候,希望如果不是指定的类型,里面报错之类的

    const mapData2Display = (data: any): IDisplay => ({
    	...data,
        id: {displayId: data.pk},
    });
    

    譬如上面这样一个函数,如果能够变成

    const mapData2Display = (data: any): IDisplay => {
    	const obj = {
        	...data,
    	    id: {displayId: data.pk},
        }
        generate_isType_or_throwErr(obj, IDisplay)
        return obj;
    }
    
    第 1 条附言  ·  2019-09-25 15:17:14 +08:00
    选择了 io-ts 试试
    7 条回复    2019-09-25 15:39:15 +08:00
    VDimos
        1
    VDimos  
       2019-09-25 11:27:31 +08:00 via Android   ❤️ 1
    不行,这个得手动检验数据类型,有专门的包可以做这个事儿。
    VDimos
        2
    VDimos  
       2019-09-25 11:27:55 +08:00 via Android   ❤️ 1
    用 json schema 也可以的
    momocraft
        3
    momocraft  
       2019-09-25 11:29:58 +08:00   ❤️ 1
    选项是没有的,有 io-ts 之类的包可以用

    总体来说在 tsc 开放 plugin API 前要么手动写 PropType,要么用人 fork 的 tsc
    Austaras
        4
    Austaras  
       2019-09-25 14:10:10 +08:00
    ls 说的对,还可以用不靠谱的插件
    HowardTang
        5
    HowardTang  
       2019-09-25 14:21:33 +08:00   ❤️ 1
    我怎麽感覺這是後端需要做的東西呢?
    如果數據類型錯,他們就不應該返回給你吧
    ruandao
        6
    ruandao  
    OP
       2019-09-25 15:16:56 +08:00
    @HowardTang 对于接口应该是不信任的, 然后,如果有错误,需要马上爆发。。。不要等过了 n 个调用后才莫名其妙的出现
    LancerComet
        7
    LancerComet  
       2019-09-25 15:39:15 +08:00
    如果只说这个场景,目前个人做法是让 deserializer 去处理属性映射和类型安全,之前仿照 Json.NET 做了一个切图用的,这样也有缺点,项目大了后需要定义不少 model: https://github.com/vuevert/Vert-Serializer
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1396 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 17:32 · PVG 01:32 · LAX 10:32 · JFK 13:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.