我正在编写TypeScript代码,在某些时候我需要获取HTTP调用的输出(基本上是一个JSON字符串)并将其转换为类型化对象。我使用as
子句来完成这项工作,如下所示:
interface MyInterface {
idUser: string;
idProducts: string[];
}
const str: string = "{ \"idUser\": \"johndoe\", \"shadowKey\": \"myValue\" }";
const myObject = JSON.parse(str) as MyInterface;
console.log(myObject);
这样就行了,console.log
指令将打印:
{
"idUser": "johndoe",
"shadowKey": "myValue"
}
我完全理解其基本原理,但我希望有一个更安全的方法。如果没有提供idProducts
字段,将引发错误,并在打印时隐藏shadowKey
。
在TypeScript中实现这一点的最佳/最简单方法是什么?
2条答案
按热度按时间gzszwxb41#
这可以通过TS类型 predicate (以前称为user-defined type guards)来实现。
为此,您需要定义一个返回类型 predicate 的函数,该类型 predicate 检查obj是否具有所需的元素。
这几乎是一个js解决方案,除了返回类型,我们可以只返回一个
boolean
结果(实际上这是js要处理的结果),但是有了这个设置,ts将能够解释结果,并能够给予你编译时的错误/问题。5vf7fwbs2#
我建议使用Zod来验证对象。
示例对象:
推断将其用作类型:
解析对象,