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

2019-09-25 11:23:12 +08:00
 ruandao

嗯,我知道 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;
}
3280 次点击
所在节点    JavaScript
7 条回复
VDimos
2019-09-25 11:27:31 +08:00
不行,这个得手动检验数据类型,有专门的包可以做这个事儿。
VDimos
2019-09-25 11:27:55 +08:00
用 json schema 也可以的
momocraft
2019-09-25 11:29:58 +08:00
选项是没有的,有 io-ts 之类的包可以用

总体来说在 tsc 开放 plugin API 前要么手动写 PropType,要么用人 fork 的 tsc
Austaras
2019-09-25 14:10:10 +08:00
ls 说的对,还可以用不靠谱的插件
HowardTang
2019-09-25 14:21:33 +08:00
我怎麽感覺這是後端需要做的東西呢?
如果數據類型錯,他們就不應該返回給你吧
ruandao
2019-09-25 15:16:56 +08:00
@HowardTang 对于接口应该是不信任的, 然后,如果有错误,需要马上爆发。。。不要等过了 n 个调用后才莫名其妙的出现
LancerComet
2019-09-25 15:39:15 +08:00
如果只说这个场景,目前个人做法是让 deserializer 去处理属性映射和类型安全,之前仿照 Json.NET 做了一个切图用的,这样也有缺点,项目大了后需要定义不少 model: https://github.com/vuevert/Vert-Serializer

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/603985

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX