用于处理数据库架构默认值的Typescript实用程序类型
我正在寻找一种为数据库模式键入默认值和虚拟值(即从其他值自动生成)的方法。其思想是使用实用程序类型自动转换模式以进行插入(不需要具有默认值或由虚拟生成的道具),并在另一端作为查询结果(例如,我们确信这些字段将由默认值或其他类似“虚拟”的设置填充,以便它们可以标记为用于处理数据库架构默认值的Typescript实用程序类型,typescript,types,Typescript,Types,我正在寻找一种为数据库模式键入默认值和虚拟值(即从其他值自动生成)的方法。其思想是使用实用程序类型自动转换模式以进行插入(不需要具有默认值或由虚拟生成的道具),并在另一端作为查询结果(例如,我们确信这些字段将由默认值或其他类似“虚拟”的设置填充,以便它们可以标记为不可为空) 如果我们将打字简化为一个单独的道具: type WithDefault<T> = T; // Mark prop as optional type Input<T> = T extends WithD
不可为空)
如果我们将打字简化为一个单独的道具:
type WithDefault<T> = T;
// Mark prop as optional
type Input<T> = T extends WithDefault<infer T> ? T | undefined : T;
类型,默认值=T;
//将道具标记为可选
type Input=T扩展默认值?T |未定义:T;
明显的问题是,输入和输入之间没有区别。
有什么想法可以帮助实现这样的模式吗?以如下模式结束:
type User = {
firstName: string
lastName: string
fullName: WithDefault<string>
}
类型用户={
名字:string
姓氏:string
全名:WithDefault
}
并且能够来回切换到可插入模式到可读取模式。正如您所说,问题在于类型在结构上是等价的,所以TS对它们的处理是相同的
您可以使用类型为的某些属性对其进行标记,以避免区分这两个属性。缺点是您正在添加一个不需要存在的属性,但是您可以通过使用一个符号来缓解这个问题,因为它保证是唯一的
以下代码(TS游乐场链接):
const\uuuuhasdefault=符号(“uuuuhasdefault”);
键入WithDefault=T&{[\uu hasdault]:never}
类型用户={
名字:string
姓氏:string
全名:WithDefault
}
类型转换架构={
[key in keyof S]:S[key]扩展为默认值?T |未定义:S[key];
}
类型result=ConvertSchema;
这会给你以下结果-这就是你想要的吗
正如您所说,问题在于类型在结构上是等价的,所以TS对它们的处理是相同的
您可以使用类型为的某些属性对其进行标记,以避免区分这两个属性。缺点是您正在添加一个不需要存在的属性,但是您可以通过使用一个符号来缓解这个问题,因为它保证是唯一的
以下代码(TS游乐场链接):
const\uuuuhasdefault=符号(“uuuuhasdefault”);
键入WithDefault=T&{[\uu hasdault]:never}
类型用户={
名字:string
姓氏:string
全名:WithDefault
}
类型转换架构={
[key in keyof S]:S[key]扩展为默认值?T |未定义:S[key];
}
类型result=ConvertSchema;
这会给你以下结果-这就是你想要的吗
好把戏!没有想到一个从不道具!看起来这可能适合我的需要!如果没有人能提供更好的答案,我会接受的!谢谢好把戏!没有想到一个从不道具!看起来这可能适合我的需要!如果没有人能提供更好的答案,我会接受的!谢谢