【发布时间】:2019-04-28 13:49:49
【问题描述】:
我正在尝试让编译器帮助我验证通过网络接收到的有效负载。所以我想做的是通过网络获取一个 JSON 有效负载,并确保编译器在所有字段都没有设置时会抱怨。我知道这样做的方法是使用验证函数,但即使在进入验证部分之前,我也需要生成一些样板文件,将具有可为空字段的类型转换为具有严格字段的类型。因此验证函数必须具有以下签名
type Validator<T> = (i: T) => Strictify<T>;
问题是我不知道如何让Strictify 实际工作。当我写以下内容时它不起作用
type Strictify<T> = {
[K in keyof T]: Exclude<T[K], undefined>
};
type Test = { k?: string };
type StrictTest = Strictify<Test>;
StrictTest 的类型应该是{ k: string },但实际上仍然是{ k?: string }。有趣的是,如果我将Test 的定义更改为{ k: string | undefined },那么它就可以工作。严格的类型是我所期望的。任何人都知道如何在不将每个 k?: T 扩展到 k: T | undefined 的情况下使这一切正常工作吗?
【问题讨论】:
标签: typescript type-conversion nullable non-nullable typescript-types