问题标签 [type-mapping]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - SQL 类型 TIME WITH TIMEZONE 有意义吗?
在将一些数据库列映射到 Java 类时,我偶然发现了这种晦涩难懂的SQL-92 标准类型(由 PostgreSQL、H2 和 HyperSQL afaik 实现)。我从未使用过它,但我想了解如果我找到它,它是如何清晰地映射到 Java 类型的。
以下是我可以看到的变体:
案例 A:
TIME
类型,例如15:20:01
。这是“当地时间”。时区对应用程序是显而易见的,因此数据库不会记录它。案例 B:
TIME
带偏移量的,如15:20:01+04:00
. 它代表“世界时间”。这个时间可以简单地转换为 UTC 或任何其他世界时钟。案例 C:
TIME
带有时区的 A,例如15:20:01 EDT
. 由于解释时间的规则很大程度上取决于具体的日期,如果没有日期,我就无法真正理解它;但是,如果我添加日期,它就会变成TIMESTAMP
,这是完全不同的东西。
那么,SQL 标准是否弄错了?或者也许“带时区的时间”应该始终解释为“带偏移的时间”(案例 B)?
typescript - 要求接口具有来自枚举的所有属性
有没有办法强制 Typescript 接口实现枚举的所有键?我的代码如下:
我想要的是,SettingsTypeMap
如果它缺少一个枚举键,我会抛出一个错误,例如,如果它看起来像这样:
它应该抛出一个错误,比如“接口缺少属性Setting.END_TIME, Setting.COOL_FEATURE, Setting.SOME_EXPIRY_SETTING
”。
typescript - 类型函子和文字数组解包
我需要帮助将我在纸上写的一些具有挑战性的 TS 启发的伪代码转换为具体的 TS。
为了完整起见,这里有一个ItemOf
符合预期的定义,一个来自文字数组的文字字符串()的“副产品类型” "a" | "b" | ...
,准备提供给Pick
:
是否可以像我试图做的那样解开类型?
我知道它可能受到了 ML 的启发,但我对它可能依赖的特性感兴趣,以便让这种类型函子定义在 TS 上运行
典型用法是:
typescript - 打字稿:类型映射类型不能用原始类型索引
我正在编写一个实例化的类,该类具有一个方法,该方法的返回类型是一个对象,其中的键来自编译器推断的泛型类型。我遇到了以下代码片段的问题,因为编译器告诉我泛型类型U
不能按类型索引T
——我认为这是不正确的,因为U
使用 进行类型映射T
,因此 T 将始终能够索引类型的对象U
。有没有办法向编译器确认是这种情况?
最小片段:
根据 Rich N. 的回答,此类将按如下方式使用:
对于上下文:DynamicReturnFormat
isDataParser
和returnObject
is decode
。我想要decodedObject
一个非“一刀切”的类型,它只包含传递给类实例化的属性。
typescript - 将 typescript moment.Moment 类型重新映射到我的扩展类型
我正在使用MomentJS库,但我没有直接使用Moment
对象,而是使用我自己的扩展,并在实例之上添加了一些附加功能Moment
:
我还编写了一个定义文件MyMoment.d.ts,它重新映射现有的moment.Moment
,以便所有函数都(...) => Moment
变为(...) => MyMoment
.
问题是某些函数采用“Moment”类型的参数,即diff()
。如果我有两个实例MyMoment
并调用diff()
,则会收到类型不兼容错误:
TS2345:“MyMoment”类型的参数不可分配给“MomentInput”类型的参数。
类型“MyMoment”不可分配给类型“Moment”。
我上面的类型映射器还应该将所有函数参数的类型从 重新映射Moment
到MyMoment
. 不幸的是,其中一些参数类型(即MomentInput
)甚至是联合类型,其中一种类型是 type Moment
。
我没有丝毫线索(还)如何重写我的映射器来重新映射那些?
或者使用一种方法来欺骗编译器
我可以说服编译器MyMoment
实际上只是Moment
从类型的角度来看,除了额外的布尔属性之外几乎MyMoment extends Moment
没有,但实际上它并不重要,它不会翻转编译器。我试图重写定义文件。
有趣的是,我在 VSCode 中看不到任何错误,甚至 intellisense 工作,但我的编译器抱怨:
TS2339:“时刻”类型上不存在属性“差异”。
所以仍然不能正常工作。
我可能很接近这个解决方案,但我需要你多看一眼上面的代码,或者......
也许有一些我什至没有想到的第三种方式?
oracle - Doctrine 2 Symfony 5 迁移到 oracle 数据库
我有
- PHP 8.0
- 在虚拟机中运行的 Ubuntu 20.4
- Symfony 版本 5
- 教义/orm 2.8.2
- 教义/dbal 2.12.1
- 学说/迁移 3.1.1
和 oracle19c 运行
我还有一些我现在想做的实体:用教义迁移。但此时我坚持这个错误:
更多信息:
- 在教义.yaml 中:
分贝:
我有一个使用以下命令创建的 oracle 数据库:
它没有任何问题
比我打电话
我收到此错误消息:
我所有的日期列都有类型 datetime 那里没有间隔!
我已经搜索过这个问题,但我无法通过。有人在为学说进行迁移时遇到这个问题吗?
非常感谢任何提示。
迈克尔
c++ - C++ 如何实现从类型到类型的编译时映射?
是否有编译时间映射的规范/参考实现,它将类型映射到类型?
例如,我需要一个来自IBar -> IFoo
或来自的类型映射int -> IFoo
。
在编译时,我可以IFoo
在给定一个IBar
.
用 C++17 怎么办?
编辑:这是一个使用结构的示例https://godbolt.org/z/EEvrYd9PE
typescript - 检查打字稿类型映射中的空类型
我想检查一个类型是否为空对象,如果是这种情况,则将其映射到 void 类型。
上面的代码不起作用,因为 evyr 对象扩展了空对象。
另一种方法是扭转局面:
但这只会匹配具有属性的对象而any
不是任何属性。
typescript - 编译 TypeScript 类型以供运行时使用
我有一个使用 REST 调用进行通信的客户端服务器应用程序。
为了防止我意外地使用了错误的类型,我在一个公共文件中定义了所有 RestCalls(摘录):
url 和方法被编码在字符串中,它也使用 express url 参数( /:
)。
Set
定义正文中的数据以及服务器是否应检查身份验证
- 要求
- 回复
- 错误响应
- 如果需要认证
然后我可以使用以下类型来获取正确的值
我现在想在运行时知道是否需要特定的呼叫身份验证。
我可以像对方法所做的那样在 url 中对其进行编码。或NeedsAuthentication
用作还提供 url 的参数。这样,当我输入 URL 时,我会自动完成,只有在需要身份验证时才会为 true,否则为 false。
我不喜欢这两种解决方法。
我想做的是
有没有办法告诉编译器编译输出 JS 中的类型,这样我就不能做编译器在干扰参数需要时所做的事情?
我目前唯一的其他解决方案是编写一个执行 prebuild 的脚本,该脚本解析我的定义并输出一个包含每个 URL 的映射,如果它需要使用一些正则表达式解析进行身份验证...
编辑
我想实现以下功能
它不是传输数据的一部分,而是编码在类型映射中。
编译器会在编译时很好地将它映射为 true 或 false 的 const 字符串(实际值仍然不会被发出......)
我可以尝试使用打字稿编译器并调用任何评估返回值的函数......