jquery - 转向 Typescript,数字错误

标签 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',但我不明白它是一个数字。

感谢任何帮助。

谢谢!

最佳答案

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/

相关文章:

javascript - 将数组发送到 frescojs pro show api

javascript - Sockets.io 接收但不发送消息

javascript - Angular 5 + Popper.JS

typescript - 如何引发复杂对象的错误?

javascript - HTML2Canvas DOM( Angular )

javascript - 读取浏览器导航栏并基于它生成导航链接

jquery - 如何清空()元素但保留事件处理程序等?

Angular 2 : have component auto detect variable change in a service

angular - Rxjs 6 等效于 Observable.create(subscriber -> {...}).share()

typescript - 必需但可能未定义的类型