我正在从API接收数据,我想在前端添加一些验证,并在验证后获得正确的类型,但实际上是特定的类型。例如,假设我获得{ keyA?: { property?: string | null | undefined }, keyB?: string | null } | null
类型的data
,我想确保property
是非空字符串,而keyB
可以为空(只是为了说明我不想验证每个字段,因为它不是常见的NonNull~ case)有没有办法在另一个函数作用域(接收此数据)中进行验证,而无需手动创建类型?
我试着创建一个函数:
function assertData(data: DType): asserts data {
if(!data) throw new Error('no data')
if(!data.keyA) throw new Error('keyA undefined');
if(!data.keyA.property) throw new Error('property undefined');
调用函数后,我可以使用数据(非空值),但keyA
可以是undefined
。我希望能够使用data.keyA.property
没有问题,并已键入为字符串。
1条答案
按热度按时间qhhrdooz1#
您可以将函数修改为具有以下签名:
我们Assert
data
是DType
,但keyA
和keyA.property
不是未定义的。Playground