gpt4 book ai didi

不接受 typescript toUpperCase() 转换

转载 作者:行者123 更新时间:2023-12-04 01:55:14 24 4
gpt4 key购买 nike

我将源类型定义为:

unit: 'hour'|'day'|'week'|'month'

我将它用作 moment.js 库的小写字母。 Bu 我还需要大写的后端端点。所以我的http方法接受参数为

unit: 'HOUR'|'DAY'|'WEEK'|'MONTH'

但是 typescript 不接受在方法调用中通过 toUpperCase 进行转换。

Argument of type 'string' is not assignable to parameter of type 'HOUR'|'DAY'|'WEEK'|'MONTH'

enter image description here

typescript 中是否有一个优雅的解决方案,我不会破坏静态类型检查,同时我不会制作额外的转换器辅助函数(自定义 toUpperCase)?

多谢指教! :)

最佳答案

您可以将 toUpperCase 的声明扩展为具有额外的重载,该重载采用字符串文字类型的特定联合并返回联合类型的大写版本。没有额外的功能,只是一个额外的编译时声明:

interface String {
toUpperCase(this: 'hour'|'day'|'week'|'month') : 'HOUR'|'DAY'|'WEEK'|'MONTH'
}

declare let low: 'hour'|'day'|'week'|'month';
let up = low.toUpperCase(); // typed as "HOUR" | "DAY" | "WEEK" | "MONTH"

注意

如果您在模块中,则需要在全局命名空间中重新声明字符串:

declare global {
interface String {
toUpperCase(this: 'hour' | 'day' | 'week' | 'month'): 'HOUR' | 'DAY' | 'WEEK' | 'MONTH'
}
}

关于不接受 typescript toUpperCase() 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51039732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com