千字文带你入门typescript

举报
vike 发表于 2021/10/29 13:12:21 2021/10/29
【摘要】 前言vue3接触有一段时间了,还是用vue+js。今天一起来学习ts语法本文从环境安装到ts入门 环境安装安装node.js环境全局安装typescript npm i -g typescript创建一个ts文件使用tsc对ts文件编译 (进入ts文件目录 执行tsc 文件名.ts) ts基本类型类型声明:类型声明是ts中非常重要的特点通过类型声明可以指定ts中变量(参数,形参)的类型指...

前言

  • vue3接触有一段时间了,还是用vue+js。今天一起来学习ts语法
  • 本文从环境安装到ts入门

环境安装

  • 安装node.js环境
  • 全局安装typescript npm i -g typescript
  • 创建一个ts文件
  • 使用tsc对ts文件编译 (进入ts文件目录 执行tsc 文件名.ts)

ts基本类型

  • 类型声明:
    • 类型声明是ts中非常重要的特点
    • 通过类型声明可以指定ts中变量(参数,形参)的类型
    • 指定类型后,当为变量赋值时,ts会自动检查值是否符合类型声明,符合则赋值,否则就报错
    • 类型声明给变量设置了类型,变量就只能存储当前类型的值
    // 声明变量a的类型为number
    let a: number;
    // 把数字1赋给变量a
    a = 1
    // 此处语法报错 'hello'为string
    a = 'hello'

1633225424.png

    // 声明b变量的类型为boolean 并赋值为true
    // let b: boolean = true
    // 在变量赋值过程中 ts会自动检测变量类型
    let b = true
    // 此处语法报错 b为boolean 不能赋值为number类型
    b = 123
  • 函数参数类型
    // 自动检测a,b类型为number
    function sum(a, b) {
        return a + b
    }
    sum(123, 456)
    
    // 将函数参数给定类型
    function sum(a:number, b:number) {
        return a + b
    }
    // 参数只能给number类型 否则报错
    sum(123, 456)
    // 参数个数严格限制 由于参数就2个,传参传了3个,此处语法报错
    sum(123, 456 ,789)
  • 函数返回值类型
    // 在函数后面加上返回值类型 返回值类型给定
    function sum(a, b):number {
        // 此处语法报错 不能给string类型
        return a + '456'
    }
    sum(123, 456)

1633228012(1).png

  • ts类型
类型 例子 描述
number 1,-33,2.5 任意数字
string ‘hello’,“hello” 任意字符串
boolean true,false 布尔值
字面量 其本身 限制变量的值就是该字面量的值
any * 任意类型
unknown * 类型安全的any
void 空值(undefined) 没有值或undefined
never 没有值 不能是任何值
object {name:‘vike’} 任意js对象
array [1,2,3] 任意js数组
tuple [4,5] 元组 ts新增类型 固定长度数组
enum enum{A,B} 枚举 ts新增类型
  • 字面量类型声明
    // a声明为10 不能更改
    let a:10
    // 此代码报错 不能赋值为11
    a = 11
    
    // 字面量类型声明基础用法
    // b声明为man或者woman 可以使用|来连接多个类型
    let b : "man" | "woman"
    b = "man"
    b = "woman"
    // 此代码报错 不是定义的字面量类型
    b = "vike"
  • 多个类型声明
    • 使用|来连接多个类型
    • 联合类型
    let a: boolean | string
    a = true
    a = 'hello'
  • any 类型
    • any表示的是任何类型
    • 变量设置了any类型后,相当于关闭了对该变量ts的类型检测
    • ts种不建议使用any类型
    • 声明变量不指定类型,ts解析器自动判断变量类型为any
    • any类型的变量可以赋值给任意变量
    // 显示any类型
    let b : any
    b = 123
    b = 'hello'
    b = true
    
    // 隐式any类型
    let b
  • unknown 类型
    • 表示未知类型的值
    let b : unknown
    b = 123
    b = 'hello'
    b = true
  • unknown 和 any的区别
    • any 可以赋值给其他变量 污染环境
    • unknown 只影响自己
    • unknown 实际上就是一个类型安全的any
    • unknow 类型的变量不能赋给其他变量
    let b : any
    b = 123
    b = 'hello'
    b = true

    let s : string
    // 赋值成功 污染变量s
    s = b

    let c : unknown
    c = '123'
    // 赋值不成功 s还是string类型 代码报错
    s = c
  • unknown 类型赋值
      1. if 判断类型是否相同
      1. 类型断言 告诉解析器变量的实际类型
    let s : string
    let c : unknown
    c = '123'
    // if 判断
    if (c === 'string') {
        s = c
    }
    // 断言 方法1
    s = c as string
    // 断言 方法2
    s = <string> c
  • void 类型
    • 用来表示空 函数为例 就是没有返回值
    function fn(): void {
        // 此处代码报错
        return 123
        // 此处代码正常运行
        return null
        return undefined
    }
  • never 类型
    • 表示永远不会返回结果
    • 常用于报错,不能返回任何空和undefined都不行
    function fn1() : never {
        throw new Error('报错信息')
    }
  • object 类型
    • object表示js的一个对象
    • 对象里有多少参数就要写多少参数
    • 如果参数不齐 就在参数后面跟?表示不确定参数
    let d: { name: string, age: number }
    d = { name: 'vike', age: 18 }
    
    // 特殊写法 不报错 表示可选属性
    let d: { name: string, age: number , sex?: string}
    d = { name: 'vike', age: 18 }
    
    // 特殊写法 传参过多 propName是自定义写法  any是属性值
    let e: { name: string, [propName: string]: any }
    e = { name: 'vike', age: 18, sex: 'man' }

  • 设置函数结构的类型声明
    • 语法: (形参:类型,形参:类型 …)=>返回值
    let f : (a:number,b:number)=>number
    f = function(a, b):number {
        return 10
    }
  • array 类型
    • 数组声明两种方式
    • 类型[]
    • Array<类型>
    // 字符串数组 创建方式
    let h : string[]
    h = ['1', '2', '3']
    // 数字数组 创建方式
    // let g : number[]
    let g : Array<number>
    g = [1, 2, 3]
  • tuple 类型
    • 元组就是固定长度的数组
    • 语法: [类型, 类型, 类型]
    let j : [string, number]
    j = ['123', 123]
  • enum 类型
    • 枚举类型
    • Gender
    enum Gender {
        Male = 0,
        Female = 1
    }

    let i: { name: string, gender: Gender }
    i = { name: 'vike', gender: Gender.Male }
  • 特殊符号
    • & 表示同时
    let x: { name: string } | { age: number }
    x = { name: 'vike', age: 18 }
  • 类型的别名
    • 给自定义类型取简单别名
    type MyType = 1 | 2 | 3 | 4 | 5
    let k : MyType
    let l : MyType

总结

  • 今日 typescript 基础及类型知识 get~
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。