转到Typescript,数字错误

时间:2017-06-10 19:13:36

标签: jquery angular typescript

我有一个使用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'但我不理解为它的数字。

感谢任何帮助。

谢谢!

2 个答案:

答案 0 :(得分:2)

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日)

答案 1 :(得分:2)

我认为这就是你想要做的事情:

// GET DATE

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

// POST FIX DATE ST ND RD TH

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

首先让datePostFix足够,并且不需要检查它是不是11,12或13,正如其他人提到的那样,你已经检查过它是31, 22或23。 也不确定在getDate中添加1是否是你想要的,因为这会给你明天的约会。