使用枚举和泛型在打字稿中获取星期几

Posted

技术标签:

【中文标题】使用枚举和泛型在打字稿中获取星期几【英文标题】:Using Enum and generics to get day of the week in typescript 【发布时间】:2021-03-26 19:19:57 【问题描述】:

我在 typescript 中有一个任务要做,使用枚举和泛型在 typescript 中获取当前日期。我已经创建了一个日期的枚举,但是在使用泛型类型对其进行索引时,它会引发错误。

这里是代码

enum Days
    SUNDAY = 1,
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAYS


function getToday<T,K extends keyof T>(days:T, key: K)
    return days[key];


let today = new Date().getDay();
console.log(getToday(Days, today)); //error

错误是

Argument of type 'number' is not assignable to parameter of type '"SUNDAY" | "MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAYS"'.

【问题讨论】:

为什么需要通用? getToday(key: Days) return days[key] 不够吗? 【参考方案1】:

这有效,new Date().getDay(); 也以数字形式返回日期,从位置 1 的 Monday 开始,因此您的 enum Days 也应该反映它。

因为new Date().getDay(); 总是返回一个数字并且你用它来索引枚举,所以你不需要再使用其他泛型类型。

enum Days 
    SUNDAY,
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAYS,
    


function getToday<T>(type: T, day: number): T[keyof T] 
    const casted = day as keyof T;
    return type[casted];

let today = new Date().getDay();
console.log(getToday(Days, today));

// returns "WEDNESDAY" 

【讨论】:

它应该以 SUNDAY = 0 开头,因为 getDay() 实际上从 SUNDAY 开始的 0 到 6 developer.mozilla.org/en-US/docs/Web/javascript/Reference/…

以上是关于使用枚举和泛型在打字稿中获取星期几的主要内容,如果未能解决你的问题,请参考以下文章

java中如何获取日期时间中的星期几?

java怎样通过日期获取星期几?

帮编写 java 获取星期几

js获取当前月的1号是星期几

javascript 从Date中获取星期几

如何使用 MonthCalendar 获取“星期几”?