TypeScript-初识

2023-10-26

引言

TypeScript(静态类检查器) 提供了 JavaScript 的所有功能,并且在这些功能之上添加了一层: TypeScript 的类型系统。TypeScript 会在执行前检查程序是否有错误,并根据值的种类进行检查。

一、定义属性

const str:string = '1111'
const a = 1
// let arr: Array<any> = [] // 定义数组
let arr = <any>[] // 类型断言 同等与 下面的 as
// let arr = [] as any // 类型断言 

// 字面类型 指定值
let x : 1 | 2 = 1

二、基础function用法

// = 默认值
const fn = (params:{x:number,y:number} = {x:1,y:2}):boolean => params.x > params.y
console.log(fn({x:66,y:23})) // true
// 如果有默认值 可以放 undefined 占位
console.log(fn()) // false
// 取函数剩余所有参数
function push (arr: any[], ...items: any[]) {
    items.forEach(item => {
        arr.push(item)
    })
}
push(arr, 1, '2', 3)

三、联合定义类型 type 与 interface

1、type

/***
 * 1. type可以定义 基本类型的别名,如 type myString = string
 * 2. type可以通过 typeof 操作符来定义,如 type myType = typeof str
 * 3. type可以申明 联合类型,如 type unionType = myType1 | myType2
 * 4. type继承是 & 
***/
type ID = string | number   // 可以用 typeOf 来判断 进行对应的操作
let id:ID
id = 111 // ok
// id= {} // error
type typeParams = {
    name:string,
    age?:number // 问好可选参数
}
// type 继承
type typeParams2 = typeParams & {
    age:number
}
let params1:typeParams = {
    name:'1111'
}
let params2:typeParams2 = {
    name:'1111',
    age:2222
}

2、Interfaces

/*
    1、interface可以合并声明,type不行
    2、interface extends 继承
*/
interface personnelInfo{
    name:string, 
    readonly sex:string, // readonly 只读
}
interface personnelInfo{
    age:number,
    resData?: personnelInfo[]; // 定义数组内容
}
interface bb extends personnelInfo{
    getInfo():object, // 定义方法
    setName:(name:string) => void,
    [propName: string]:any;  // 代表可以新增任意属性
}
const obj:bb = {
    name:'1111',
    sex:'男',
    resData:[
      {
        name:'1111',
        age:2222,
        sex:'男'
      }
    ],
    age:99,
    getInfo:function(){
       return {name:this.name,age:this.age}
    },
    setName:function(name){
        this.name = name
    },
    test:'1', // 任意属性
    test2:222  // 任意属性
}

const arr2:Array<bb> = []

interface numberIndex {
    [x: number]: string
}
// 相当于声明了一个字符串类型的数组
let chars: numberIndex = ['A', 'B']

四、类型断言 as

// unknown 和 any 都是自定义类型 两者区别
/*
  unknown 更加严格,在操作之前会进行某种检查,不允许访问属性,不允许赋值给其他有明确类型的变量,如果用as断言了,需要断言为相对应的类型
  any 不会检测,可以随意赋值,any级别最高
  例如
    let a:unknown = 1
    a.msg // error 
    a.split(',') // error 
    let b:any = 1
    b.any // ok
*/
let num2:any = 1;
let str3 = num2 as string // 类型转换
num2 = '1'; num2=2
// str3=111 异常
str3='111'

let num1:number = 1;
let str2 = num1 as unknown as string // 类型转换
// str2 = 222 异常
str2 = '222'

const foo = <personnelInfo>{ // 这样的类型断言不会检查除错误
    name:'1111',
    // sex:'男',
    // age:99,
}

console.log(num1,num2,str2,str3)

五、unknown 和 any的区别

unknown 更加严格,在操作之前会进行某种检查,不允许访问属性,不允许赋值给其他有明确类型的变量,如果用as断言了,需要断言为相对应的类型。

any 不会检测,可以随意赋值,any级别最高

 // 例如
let a:unknown = 1
a.msg // error 
a.split(',') // error 
let b:any = 1
b.any // ok

六、枚举

/* 枚举常用在字面化表达一个变量的不同类型值,比如:性别。只能使用枚举里面的值 */
enum Sex{
    nan='男',
    nv ='女'
}
let cc:Sex | null = Sex.nan
// cc = '111' // 不能将类型“"111"”分配给类型“Sex” error
cc = Sex.nv
// 如果没有赋值 默认值为0
enum Direction {
    Up,
    Down,
    Left,
    Right
}
let direction:Direction =Direction.Up
console.log(direction) // 0

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TypeScript-初识 的相关文章

随机推荐

  • 【适合小白】开发一个区块链应用

    前言 本篇教程是小编基于FISCO BCOS官网的教程撰写的 有不明白的地方也可以去官网上的教程看看 在开发区块链应用之前 首先得完成搭建第一个区块链应用 目的是为了搭建节点跟启动控制台 1 了解应用需求 区块链天然具有防篡改 可追溯等特性
  • MQTT协议学习

    MQTT协议是目前物联网最主要的协议 它的设计主要是运用于 低带宽 低网速 差网络环境能够保证数据的正常传输 MQTT协议基于TCP IP协议 运用订阅发布模式 解除应用之间的耦合关系 客户端与客户端之间只需要知道服务器位置 就可以传输数据
  • Github管理项目代码相关git命令

    1 Git global setup git config global user name username git config global user email user email 2 Create a new repositor
  • .classpath .project ch2.iml这三个文件如何理解?

    这三个文件通常出现在Java开发中使用的集成开发环境 IDE 项目中 如Eclipse或IntelliJ IDEA 它们在项目的组织和配置方面发挥着重要的作用 classpath 文件 classpath 是 Eclipse 项目的配置文件
  • Wireshark使用小心得

    Wireshark工作使用小结 基本概念 wireshark是个开源的好用软件 用来分析数据包 数据包 通常就是四层信息 物理层数据帧 数据链路层以太帧头部 网络层IP包头部 传输层TCP包头部 最后就是应用层信息 基础功能使用 打开软件界
  • 范数介绍及C++/OpenCV/Eigen的三种实现

    有时我们需要衡量一个向量的大小 在机器学习中 我们经常使用被称为范数 norm 的函数衡量向量大小 形式上 Lp范数定义如下 范数 包括Lp范数 是将向量映射到非负值的函数 直观上来说 向量x的范数衡量从原点到点x的距离 更严格地说 范数是
  • 失业的程序员(五):商战之前

    本系列前章 失业的程序员 一 二 三 四 一 关于裸奔 早几年出现了很多新名词 如裸婚 蜗居 蚁族 而像我们这种没背景 没后台 没资金的程序员创业那简直可以称为裸奔 创业是否成功的标准实在太多 不能只拿钱来衡量因为很多人会说你铜臭 不能只拿
  • MYSQL的存储过程

    存储过程 存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合 调用存储过程可以简化应用开发人员的很多工作 减少数据在数据库和应用服务器之间的传输 对于提高数据处理的效率是有好处的 存储过程思想上很简单 就是数据库 SQL 语言
  • IAR编译器问题的总结

    之前做项目都是用keil编译器比较多 也基本上用得很顺手 但是最近又开始用IAR编译器 结果这次真是被它折磨得快要崩溃 现在把问题总结如下 IAR编译器版本 IAR2 10 4 IAR编译器默认的优化设置一定要注意 这个是之前做的一个项目
  • Kotlin协程源码简单聊一聊,浅浅看看表层

    今日科技快讯 近日 经历了一次停办 两次规模严重缩水之后 2023年世界移动通信大会 MWC 终于再现往日盛况 有来自200多个国家和地区的2000多家厂商参加 并在此次展会上发布了最新的产品与科技 仅中国就有100余家厂商参展 每年的MW
  • 详解前端性能优化之原生JS实现图片懒加载效果(通过IntersectionObserver内置构造函数实现)

    相信你作为一名用户 使用一款app 在首次打开页面时卡顿超过3秒时就会有退出的想法 所以我们在日常开发中 通常需要使用一些手段实现对性能的优化 来使得页面加载更快 用户体验更好 这其中有许多方式 其中最常用的无非是按需加载了 今天就带大家重
  • 硬盘配置raid5时碰见unconfiguration bad问题记录

    环境 长城服务器 昆仑bios 问题描述 系统装了四个SSD盘 但在BIOS配置raid的 Driver Manager 驱动识别界面中四块硬盘中的三块都是坏的 显示unconfiguration bad 并且在后面的raid配置界面中识别
  • MES系统质量追溯功能,到底在追什么?

    今天我们就来分析一下生产企业的产品质量追溯问题 以及MES系统中产品追溯的应用 我们知道 生产质量管理是MES系统中十分重要的一部分 因为长期以来 车间质量管理部门希望车间的加工水平持续保持在最佳状态 对加工过程产生的质量问题能得到及时的发
  • 河北某日报移动端python数据采集 eds加密新闻内容

    写在最前面 此移动端采用EDS 的js加密 核心的js加密代码 贴在 个人爱好尝试破解 仅提供技术交流用 目标地址 抓取的详情页地址 var e 4Qjir8b019EIXH0FBzIJIuElne7uRYd6AB7qOIQg TdtJrw
  • Java日期计算溢出问题

    先看下面的代码 SimpleDateFormat fmt new SimpleDateFormat yyyy MM dd final Date beginDate fmt parse 2013 8 1 for int i 0 i lt 30
  • 【Docker】ERROR: Could not find a version that satisfies the requirement pytest==5.0.1

    1 背景 背景参考 Docker elasticsearch 监控工具 elasticsearch HQ lcc lcc soft es elasticsearch HQ 3 5 12 pip install r requirements
  • Java解决Oracle中ORA-12542:TNS无监听程序ORA-12542:TNS:监听程序无法识别连接符中请求的服务

    环境 WINDOWS2003 ORACLE 10G 第一次安装完ORACLE后使用SQLPLUS链接都是没问题的 但重启服务器就报了异常 ORA 12541 TNS 无监听程序 这里肯定是监听器出了问题 但没有做任何变动 只是重启了服务器
  • 音频特征(2):时域图、频谱图、语谱图(时频谱图)

    文章目录 时域和频域 1 概述 2 时域 波形和频域 用几张对比图来区分 2 1 时域和频域 2 2 区分 时频谱图 语谱图 傅里叶变换的典型用途是将信号分解成频率谱 显示与频率对应的幅值大小 时域和频域 1 概述 1 什么是信号的时域和频
  • Zabbix实践(四) zabbix的通知推送解决方案

    zabbix 监控建立起来后 可以使用zabbix自带的推送接口 进行消息的推送 本节 说明一下采用OneAlert产品作为 zabbix的下游 进行消息推送 OneAlert 是一款集成了各种推送和接收消息的软件 个人版本免费 其他版本
  • TypeScript-初识

    引言 TypeScript 静态类检查器 提供了 JavaScript 的所有功能 并且在这些功能之上添加了一层 TypeScript 的类型系统 TypeScript 会在执行前检查程序是否有错误 并根据值的种类进行检查 一 定义属性 c