我有一个使用 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',但我不明白它是一个数字。
感谢任何帮助。
谢谢!
最佳答案
Typescript 试图让您免于编写无效代码。当到达date !== 11
时部分,它知道date
必须是 1、21 或 31(因此 date
的类型为 1 | 21 | 31
,它是联合类型 - 请参阅 Advanced Types )。它知道这些数字都不可能等于 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 号)
关于jquery - 转向 Typescript,数字错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44477128/