广告
返回顶部
首页 > 资讯 > 精选 >怎么在TypeScript中处理日期字符串
  • 311
分享到

怎么在TypeScript中处理日期字符串

2023-06-30 10:06:01 311人浏览 安东尼
摘要

这篇文章主要讲解了“怎么在typescript中处理日期字符串”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在TypeScript中处理日期字符串”吧!一、模板字面量类型在typescr

这篇文章主要讲解了“怎么在typescript中处理日期字符串”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在TypeScript中处理日期字符串”吧!

一、模板字面量类型

在typescript4.1版本中引入,模板字面量类型和javascript的模板字符串语法相同,但是是作为类型使用。模板字面量类型解析为一个给定模板的所有字符串组合的联合。这听起来可能有点抽象,

直接看代码:

type Person = 'Jeff' | 'Maria'type Greeting = `hi ${Person}!` // Template literal typeconst validGreeting: Greeting = `hi Jeff!` // // note that the type of `validGreeting` is the uNIOn `"hi Jeff!" | "hi Maria!`const invalidGreeting: Greeting = `bye Jeff!` // // Type '"bye Jeff!"' is not assignable to type '"hi Jeff!" | "hi Maria!"

模板字面量类型非常强大,允许你对这些类型进行通用类型操作。例如,大写字母化。

type Person = 'Jeff' | 'Maria'type Greeting = `hi ${Person}!`type LoudGreeting = Uppercase<Greeting> // Capitalization of template literal typeconst validGreeting: LoudGreeting = `HI JEFF!` // const invalidGreeting: LoudGreeting = `hi jeff!` // // Type '"hi Jeff!"' is not assignable to type '"HI JEFF!" | "HI MARIA!"

二、类型谓词缩小范围

typescript在缩小类型范围方面表现得非常好,可以看下面这个例子:

let age: string | number = getAge();// `age` is of type `string` | `number`if (typeof age === 'number') {  // `age` is narrowed to type `number`} else {  // `age` is narrowed to type `string`}

也就是说,在处理自定义类型时,告诉typescript编译器如何进行类型缩小是有帮助的。例如,当我们想在执行运行时验证后缩小到一个类型时,在这种情况下,类型谓词窄化,或者用户定义的类型守护,就可以派上用场。

在下面这个例子中,isDog类型守护通过检查类型属性来帮助缩小animal变量的类型:

type Dog = { type: 'dog' };type Horse = { type: 'horse' };//  custom type guard, `pet is Dog` is the type predicatefunction isDog(pet: Dog | Horse): pet is Dog {  return pet.type === 'dog';}let animal: Dog | Horse = getAnimal();// `animal` is of type `Dog` | `Horse`if (isDog(animal)) {  // `animal` is narrowed to type `Dog`} else {  // `animal` is narrowed to type `Horse`}

三、定义日期字符串

为了简洁起见,这个例子只包含YYYYMMDD日期字符串的代码。

首先,我们需要定义模板字面量类型来表示所有类似日期的字符串的联合类型

type oneToNine = 1|2|3|4|5|6|7|8|9type zeroToNine = 0|1|2|3|4|5|6|7|8|9type YYYY = `19${zeroToNine}${zeroToNine}` | `20${zeroToNine}${zeroToNine}`type MM = `0${oneToNine}` | `1${0|1|2}`type DD = `${0}${oneToNine}` | `${1|2}${zeroToNine}` | `3${0|1}`type RawDateString = `${YYYY}${MM}${DD}`;const date: RawDateString = '19990223' // const dateInvalid: RawDateString = '19990231' //31st of February is not a valid date, but the template literal doesnt know!const dateWrong: RawDateString = '19990299'//  Type error, 99 is not a valid day

从上面的例子可以得知,模板字面量类型有助于指定日期字符串的格式,但是没有对这些日期进行实际验证。因此,编译器将19990231标记为一个有效的日期,即使它是不正确的,只因为它符合模板的类型。

另外,当检查上面的变量如datedateInvaliddateWrong时,你会发现编辑器会显示这些模板字面的所有有效字符的联合。虽然很有用,但是我更喜欢设置名义类型,使得有效的日期字符串的类型是DateString,而不是"19000101" | "19000102" | "19000103" | ...。在添加用户定义的类型保护时,名义类型也会派上用场。

type Brand<K, T> = K & { __brand: T };type DateString = Brand<RawDateString, 'DateString'>;const aDate: DateString = '19990101'; // // Type 'string' is not assignable to type 'DateString'

为了确保我们的DateString类型也代表有效的日期,我们将设置一个用户定义的类型保护来验证日期和缩小类型

const isValidDate = (str: string): boolean => {  // ...};//User-defined type guardfunction isValidDateString(str: string): str is DateString {  return str.match(/^\d{4}\d{2}\d{2}$/) !== null && isValidDate(str);}

现在,让我们看看几个例子中的日期字符串类型。在下面的代码片段中,用户定义的类型保护被应用于类型缩小,允许TypeScript编译器将类型细化为比声明的更具体的类型。然后,在一个工厂函数中应用了类型保护,以从一个未标准化的输入字符串中创建一个有效的日期字符串。

// valid string fORMat, valid dateconst date: string = '19990223';if (isValidDateString(date)) {  // evaluates to true, `date` is narrowed to type `DateString` }//  valid string format, invalid date (February doenst have 31 days)const dateWrong: string = '19990231';if (isValidDateString(dateWrong)) {  // evaluates to false, `dateWrong` is not a valid date, even if its shape is YYYYMMDD }function toDateString(str: RawDateString): DateString {  if (isValidDateString(str)) return str;  throw new Error(`Invalid date string: ${str}`);}//  valid string format, valid dateconst date1 = toDateString('19990211');// `date1`, is of type `DateString`//  invalid string formatconst date2 = toDateString('asdf');//  Type error: Argument of type '"asdf"' is not assignable to parameter of type '"19000101" | ...//  valid string format, invalid date (February doenst have 31 days)const date3 = toDateString('19990231');//  Throws Error: Invalid date string: 19990231

感谢各位的阅读,以上就是“怎么在TypeScript中处理日期字符串”的内容了,经过本文的学习后,相信大家对怎么在TypeScript中处理日期字符串这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 怎么在TypeScript中处理日期字符串

本文链接: https://www.lsjlt.com/news/328120.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在TypeScript中处理日期字符串
    这篇文章主要讲解了“怎么在TypeScript中处理日期字符串”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在TypeScript中处理日期字符串”吧!一、模板字面量类型在typescr...
    99+
    2023-06-30
  • 如何在TypeScript中处理日期字符串
    目录前言:一、模板字面量类型二、类型谓词缩小范围三、定义日期字符串总结:前言: 在我最近的一个项目中,我必须去处理多个自定义的日期字符串表示法,比如YYYY-MM-DD和YYYYMM...
    99+
    2022-11-13
  • php sql 字符串怎么转日期
    本文操作环境:windows7系统、PHP7.1版、DELL G3电脑php sql 字符串怎么转日期php将字符串转化成date存入数据库的两种方式第一种方式代码如下:$date= date("Y-m-d",strto...
    99+
    2017-01-29
    php 字符串 日期
  • python怎么提取字符串中的日期
    要提取字符串中的日期,可以使用正则表达式来匹配日期格式,然后使用datetime模块将匹配到的日期字符串转换为日期对象。以下是一个示...
    99+
    2023-08-11
    python
  • mysql字符串转日期怎么实现
    在MySQL中,可以使用STR_TO_DATE函数将字符串转换为日期。具体语法如下:STR_TO_DATE(str, format)...
    99+
    2023-10-18
    mysql
  • JavaScript怎么将日期转换为字符串
    本篇内容介绍了“JavaScript怎么将日期转换为字符串”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-19
  • mysql怎么将字符串转化为日期
    mysql将字符串转化为日期的示例:select str_to_date('2020-11-23', '%Y-%m-%d %H');#结果:2020-11-23 00:...
    99+
    2022-10-19
  • java怎么将日期转换成字符串
    在Java中,可以使用`SimpleDateFormat`类将日期转换为字符串。以下是一个示例代码,演示了如何将当前日期转换为字符串...
    99+
    2023-08-17
    java
  • 怎么在javascript中将将字符串转换为日期类型
    怎么在javascript中将将字符串转换为日期类型?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。javascript将字符串转为日期类型var st...
    99+
    2023-06-14
  • SQL中日期与字符串怎么互相转换
    这篇文章主要讲解了“SQL中日期与字符串怎么互相转换”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SQL中日期与字符串怎么互相转换”吧!一.Oracle日期...
    99+
    2022-11-30
    sql
  • DOS批处理下如何格式化日期字符串
    小编给大家分享一下DOS批处理下如何格式化日期字符串,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在Linux下,简单的一句话:date '+%Y%m%d...
    99+
    2023-06-08
  • mysql字符串怎么转换为日期类型
    在MySQL中,可以使用STR_TO_DATE()函数将字符串转换为日期类型。函数语法如下:STR_TO_DATE(str,form...
    99+
    2023-10-09
    mysql
  • php中文日期字符串怎么转时间格式
    php中文日期字符串转时间格式的方法:1、创建一个php示例文件;2、定义一个中文日期字符串;3、通过“date_parse_from_format()”以及“mktime()”函数实现转换日期格式即可。本教程操作环境:Windows10系...
    99+
    2023-05-14
    php 日期
  • 教你怎么用python实现字符串转日期
    目录一、生成日期数据1.1 设定开始时间、长度、频率1.2 设定起始、终止时间、频率二、字符串转化为日期2.1 pd.to_datetime()2.2 datetime.strptime三、从日期数据中提取成分3.1...
    99+
    2022-06-02
    python字符串转日期 python pandas库
  • java怎么从不规则的字符串中截取出日期
    本篇内容介绍了“java怎么从不规则的字符串中截取出日期”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!从不规则的字符串中截取出日期最近在项目...
    99+
    2023-06-22
  • JavaScript中怎么实现字符串处理
    这篇文章将为大家详细讲解有关JavaScript中怎么实现字符串处理,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。字符串去重function un...
    99+
    2022-10-19
  • 如何批处理将字符串或日期输出到Windows剪贴板
    这篇文章主要介绍如何批处理将字符串或日期输出到Windows剪贴板,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!如下操作需要借助于clip.exe(C:\Windows\System32\clip.exe),系统自带...
    99+
    2023-06-08
  • DOS批处理下格式化日期字符串的方法有哪些
    这篇文章将为大家详细讲解有关DOS批处理下格式化日期字符串的方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。谈到日期字符串的输出,真是让人烦。在Linux下,简单的一句话:date '+%...
    99+
    2023-06-08
  • C++中的字符串编码怎么处理
    今天小编给大家分享的是C++中的字符串编码怎么处理,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。今天由于在项目中用到一些与C++混合开发的东西 ,需要通过socket与C++那边交换...
    99+
    2023-07-06
  • mysql中字符串和日期格式的图片是怎样的
    mysql中字符串和日期格式的图片是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。看完上述内容是否对您有帮助呢?如果还想...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作