Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于处理数据库架构默认值的Typescript实用程序类型_Typescript_Types - Fatal编程技术网

用于处理数据库架构默认值的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;
这会给你以下结果-这就是你想要的吗


好把戏!没有想到一个
从不
道具!看起来这可能适合我的需要!如果没有人能提供更好的答案,我会接受的!谢谢好把戏!没有想到一个
从不
道具!看起来这可能适合我的需要!如果没有人能提供更好的答案,我会接受的!谢谢