Jus*_*ant 4 amazon-dynamodb typescript
AWS DynamoDB 不存储Date值,因此所有日期/时间值在存储之前都需要序列化为 ISO 8601 字符串,然后在Date检索时需要从字符串反序列化。
我创建了一对通用 TypeScript 辅助函数来执行序列化和反序列化。但我不确定如何使这些函数类型安全。我也不想处理维护正常类型与序列化类型对的问题 - 相反,我只想定义“正常”类型并使用泛型类型定义来定义序列化类型。
具体来说,给定某些T可能具有Date类型属性的类型(无论是在顶层还是在嵌套对象中),我想为其创建一个Serialized<T>具有相同形状的类型定义,T只是所有Date类型属性都替换为string. 这可能吗?
例如,给定一个如下所示的对象:
interface OriginalType {
foo: Date,
bar: number,
nested: {
created: Date
}
}
Run Code Online (Sandbox Code Playgroud)
我想最终得到如下所示的类型:(但无需手动输入定义)
interface SerializedType {
foo: string,
bar: number,
nested: {
created: string
}
}
Run Code Online (Sandbox Code Playgroud)
应该做什么声明Serialized<T>?
您正在寻找使用条件类型(以检查每个字段是否为日期)的递归同态映射类型(以迭代字段)。
type Serialized<T> = {
[P in keyof T]: T[P] extends Date ? string : Serialized<T[P]>
};
Run Code Online (Sandbox Code Playgroud)
该解决方案利用了特殊规则,即应用同态映射类型(例如,Serialized应用于基本类型)会返回基本类型,而不管同态映射类型的主体如何。
| 归档时间: |
|
| 查看次数: |
1340 次 |
| 最近记录: |