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

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

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

    嗯,我知道 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 条附言  ·  74 天前
    选择了 io-ts 试试
    7 回复  |  直到 2019-09-25 15:39:15 +08:00
        1
    VDimos   74 天前 via Android   ♥ 1
    不行,这个得手动检验数据类型,有专门的包可以做这个事儿。
        2
    VDimos   74 天前 via Android   ♥ 1
    用 json schema 也可以的
        3
    momocraft   74 天前   ♥ 1
    选项是没有的,有 io-ts 之类的包可以用

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