我将源类型定义为:
unit: 'hour'|'day'|'week'|'month'
Run Code Online (Sandbox Code Playgroud)
我将它用作 moment.js 库的小写字母。我还需要它大写作为后端端点。所以我的 http 方法接受参数为
unit: 'HOUR'|'DAY'|'WEEK'|'MONTH'
Run Code Online (Sandbox Code Playgroud)
但打字稿不接受方法调用中通过 toUpperCase 的转换。
“string”类型的参数不可分配给“HOUR”|“DAY”|“WEEK”|“MONTH”类型的参数
打字稿中是否有一个优雅的解决方案,我不会破坏静态类型检查,同时我不会创建额外的转换器辅助函数(自定义 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"
Run Code Online (Sandbox Code Playgroud)
笔记
如果您在模块中,则需要在全局命名空间中重新声明字符串:
declare global {
interface String {
toUpperCase(this: 'hour' | 'day' | 'week' | 'month'): 'HOUR' | 'DAY' | 'WEEK' | 'MONTH'
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2581 次 |
| 最近记录: |