V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
ruandao

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

  •  
  •   ruandao · Sep 25, 2019 · 3870 views
    This topic created in 2410 days ago, the information mentioned may be changed or developed.

    嗯,我知道 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;
    }
    
    Supplement 1  ·  Sep 25, 2019
    选择了 io-ts 试试
    7 replies    2019-09-25 15:39:15 +08:00
    VDimos
        1
    VDimos  
       Sep 25, 2019 via Android   ❤️ 1
    不行,这个得手动检验数据类型,有专门的包可以做这个事儿。
    VDimos
        2
    VDimos  
       Sep 25, 2019 via Android   ❤️ 1
    用 json schema 也可以的
    momocraft
        3
    momocraft  
       Sep 25, 2019   ❤️ 1
    选项是没有的,有 io-ts 之类的包可以用

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