热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

deserializeobject类型不确定_TypeScript(五)——类型知识补充

文章内容输入来源:拉勾教育大前端训练营目录隐式类型推断类型断言方法一:as关键词方法二:尖括号断言类型声明(declare)声明步骤使用第
d5a18efe490e1bab6036381fbcb6e28f.png

文章内容输入来源:拉勾教育大前端训练营

目录

  • 隐式类型推断
  • 类型断言
    • 方法一:as 关键词
    • 方法二:尖括号断言
  • 类型声明(declare)
    • 声明步骤
    • 使用第三方库lodash
    • 使用第三方库query-string
  • TypeScript学习地图

之前讲语法,觉得这些既属于语法,但是不是特殊的类型,一时间不知道怎么分类,所以就做为类型补充知识。

隐式类型推断

隐式类型推断 : 如果我们没有明确通过类型注解去标注这个变量的类型,那么TypeScript根据一些可以推断出这个类型。

下面这个例子:

如果我们没有设定类型,赋值了一个数字,那么会推断这个为number类型,之后再赋值为字符串,就会报类型错误。

e0d8ba326b3a7e59db1b2d03ea6d4e63.png

如果TypeScript无法推断这个变量的类型,就会定为any,后面赋值什么类型都可以。

91153eca80b5fd02d5a2aee95b5d0589.png

开发的时候还是建议大家为每个变量添加明确的类型,为了后期更直观的理解代码。

类型断言

TypeScript有时无法推断出来一些变量的类型,但是我们可以明确知道,所以有些时候它给了我们一些不确定选项的时候我们可以断言成确定的类型。使用类型断言就可以辅助ts更加明确每个变量的类型。

TypeScript类型断言不是类型转换,类型转换是在运行阶段,断言是在编译阶段,编译过后断言就不存在了。

举个例子:

const nums = [110, 120, 119, 112]
// 下面返回的 res ,ts认为可能是number,也可能是undefined
const res = nums.find(i => i > 0)// 如果下面要对res进行运算,res直接运算就会报错
const square = res * res // 报错,就要断言它为number类型才行

方法一:as 关键词

使用as就可以明确num1是一个数字,下面就可以使用数字运算

const num1 = res as number

方法二:尖括号断言

这个尖括号和jsx的标签产生冲突,那种情况不推荐使用

const num2 = res

类型声明(declare)

开发过程中我们会用到第三方模块,这些模块并不都是用typeScript编写的,所以它的成员可能就没有强类型体验。

声明步骤

  1. 如果有typescript匹配的类型声明,可以直接使用
  2. 如果没有就只能手动进行类型声明(declare)
  3. 可以在社区中有可以直接npm下载对的类型声明模块,安装使用

存在的原因是为了兼容普通的js模块.

使用第三方库lodash

使用lodash举例子,lodash本身没有集成类型声明,所以使用的时候会报错。我们可以自己手动进行类型声明

下面的函数,直接调用camelCase没有类型提示,所以在前面添加declare对函数camelCase进行参数和返回值的限制,这样可以看到这个函数有了类型的提示

171a27a4f81581dbd2ce9c5823e7ec50.png

那上面的lodash还是报错,那么我们看可能需要下一些东西进行兼容,因为TS社区比较强大,大部分的第三方模块都有对应的类型声明,直接安装其对应的类型声明模块(一般是@types/模块名)即可.

类型声明是开发依赖,里面不会提供任何的代码,只是对模块做对应的类型声明
b9d0a30e793fe40df3a48d0193d7982c.png

安装

# yarn
yarn add @types/lodash --dev
# npm
npm i @types/lodash

安装之后lodash可看到里面有很多.d.ts的类型声明文件,对应的代码中就有对应的类型声明提示了

79fbf3d2d8f2198e7fbd78bff035a657.png

使用第三方库query-string

query-string —— 解析query中的url字符串

本身包里面集成了类型声明文件,不需要额外再安装。

# yarn
yarn add query-string
# npm
npm i query-string

使用的时候看到有类型声明的介绍

36059f1139237a6e22051e9867090beb.png

TypeScript学习地图

2ac19588352f7ce3735938250b4a975d.png



推荐阅读
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 本文介绍了PHP常量的定义和使用方法,包括常量的命名规则、大小写敏感性、全局范围和标量数据的限制。同时还提到了应尽量避免定义resource常量,并给出了使用define()函数定义常量的示例。 ... [详细]
  • 本文介绍了2015年九月八日的js学习总结及相关知识点,包括参考书《javaScript Dom编程的艺术》、js简史、Dom、DHTML、解释型程序设计和编译型程序设计等内容。同时还提到了最佳实践是将标签放到HTML文档的最后,并且对语句和注释的使用进行了说明。 ... [详细]
  • 本文介绍了JavaScript进化到TypeScript的历史和背景,解释了TypeScript相对于JavaScript的优势和特点。作者分享了自己对TypeScript的观察和认识,并提到了在项目开发中使用TypeScript的好处。最后,作者表示对TypeScript进行尝试和探索的态度。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 校园表白墙微信小程序,校园小情书、告白墙、论坛,大学表白墙搭建教程
    小程序的名字必须和你微信注册的名称一模一样在后台注册好小程序。mp.wx-union.cn后台域名https。mp.wx-union.cn ... [详细]
  • ReactJSUIAnt设计空组件原文:https://w ... [详细]
  • npminstall-Dbabelcorebabelpreset-envbabelplugin-transform-runtimebabelpolyfillbabel-loader ... [详细]
author-avatar
钟爱gyt_201
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有