转移到打字稿,数字错误

德文93

我有一个使用 html、css 和 jQuery 制作的静态应用程序。我现在将它导入到 Angular 2,但我遇到了日期问题:

// GET DATE

let d = new Date();
let day = d.getDay() + 1;
let date = d.getDate() + 1;
let datePostFix;

// POST FIX DATE ST ND RD TH

if (date == 1 || date == 21 || date == 31 && date !== 11) {
    let datePostFix = "st"
} else if (date === 2 || date === 22 && date !== 12) {
    let datePostFix = "nd"
} else if (date === 3 || date === 23 && date !== 13) {
    let datePostFix = "rd"
} else {
    let datePostFix = "th"
}

基本上每个 if 语句都会在 !== 上出错。我得到的错误是 [ts] 运算符 '!==' 不能应用于类型 '31' 和 '11',但我不明白它是一个数字。

任何帮助表示赞赏。

谢谢!

AJ理查森

Typescript 试图让您免于编写无效的代码。当它到达date !== 11零件时,它知道它date必须是 1、21 或 31(因此date有一个类型1 | 21 | 31,这是一个联合类型 - 请参阅高级类型)。它知道这些数字都不可能等于 11,因此它试图告诉您不应将其与 11 进行比较。

如果删除!==比较,代码的行为将完全相同:

if (date == 1 || date == 21 || date == 31) {
    let datePostFix = "st"
} else if (date === 2 || date === 22) {
    let datePostFix = "nd"
} else if (date === 3 || date === 23) {
    let datePostFix = "rd"
} else {
    let datePostFix = "th"
}

编辑:正如@missingmanual 所指出的,d.getDate() + 1几乎肯定不是你想要的。在大多数情况下,这将为您提供明天的日期(因为getDate()已经返回了 1-31 形式的数字)。在某些情况下,这甚至可能会给您一个无效的日期(例如,如果今天是 31 日,您将得到 32)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章