• 02 ts 变量定义,类型


    目录

    变量声明

    string类型

    number类型

    boolean类型

    Array类型

    Object类型

    symbol类型

    null与undefined类型

    any类型

    unknown类型

    void类型

    never类型

     tuple类型

     函数的参数与返回值

    对象类型

    可选类型

    联合类型

    类型别名

    类型断言

    非空类型断言

    可选链

    ??与!!运算符

    字面量类型

    字面量推理


    变量声明

    在ts中定义变量需要指定标识符类型,

    var/let/const 标识符: 数据类型 = 赋值

    当我们没有写数据类型时,ts也会帮助我们进行类型推断,但是能写还是要写的

    string类型

    1. // string 小写 ts中字符串类型
    2. // String 大写 js中包装类
    3. // 支持模板字符串拼接
    4. const message: string = "hello ts"

    number类型

    1. // 不区分整形与浮点型,ts也支持二进制,八进制,十六进制
    2. let age: number = 18

    boolean类型

    1. // 只有true false
    2. let bol: boolean = true

    Array类型

    1. // 数组存放元素要确定,
    2. // 存放不同类型是不好习惯
    3. const names: Array<string> = [] // 不推荐 jsx中有冲突
    4. const names2: string[] = [] // 推荐

    Object类型

    1. // Object类型
    2. // 不要info: Object这样写 之后取值时报错
    3. // 一般都是让它类型推导
    4. const info: Object = {
    5. name: 'yun',
    6. age: 18
    7. }

    symbol类型

    1. // 用的较少
    2. const title1: symbol = Symbol('title')
    3. const title2: symbol = Symbol('title')
    4. const youInfo = {
    5. [title1]: "程序员",
    6. [title2]: "教师"
    7. }

    null与undefined类型

    1. // null类型只有一个值 null
    2. const n1: null = null
    3. // undefined类型只有一个值 undefined
    4. const n2: undefined = undefined

    any类型

    1. // 当我们无法确定变量类型,且它可能变化,我们可以使用any
    2. // 我们可以对any类型的变量进行任何操作
    3. // 如果你项目中所有地方都使用any,则与js没有区别
    4. let message: any = "hello"
    5. message = 123
    6. message = {
    7. }
    8. const arr: any[] = ["shi", 18, 18]

    unknown类型

    1. // 用于描述类型不确定的变量
    2. // 与any的区别: any声明的变量可以赋值给任意变量,unknown只能赋值给unknown与any
    3. let res: unknown
    4. let fiag = true
    5. if (fiag) {
    6. res = "str"
    7. } else {
    8. res = 123
    9. }

    void类型

    1. // void通常指定一个函数是没有返回值的,那它的返回值就是void类型
    2. // 我们可以将null undefined赋值给void类型,也就是函数可以返回null与undefined
    3. function sum(num1: number, num2: number): void {
    4. console.log(num1 + num2);
    5. }

    never类型

     tuple类型

     函数的参数与返回值

    1. // 函数的返回值类型一般不写
    2. function sum(num1: number, num2: number): number {
    3. return num1 + num2
    4. }
    5. const names = ["shi", "yun", "ya"]
    6. // 匿名函数,称之为上下文类型,ts会自动推断item类型
    7. names.map(item => {
    8. })

    对象类型

    1. function friendInfo(friend: {name: string,age: number}) {
    2. console.log(friend.name,friend.age);
    3. }
    4. friendInfo({name:"yun",age:123})

    可选类型

    1. // 可选类型,可选可不选,如果没指定类型,就是any类型
    2. function friendInfo(friend: {name: string,age: number,mom?: string}) {
    3. console.log(friend.name,friend.age);
    4. }
    5. friendInfo({name:"yun",age:123})
    6. friendInfo({name:"ya",age:100,mom:'zhao'})

    联合类型

    ts允许我们使用多种运算符从现有类型中构建新类型

    联合类型是由两个或者多个其他类型组成的类型; 表示可以是这些类型中的任何一个值

    1. function printInfo(message: number|string|boolean) {
    2. }
    3. printInfo(123)
    4. printInfo("abc")
    5. printInfo(false)
    6. // 联合类型与可选类型关系,可选类型可以看做是类型与undefined的联合类型
    7. function printMes(message?: string) {
    8. }
    9. printMes("xxx")
    10. printMes()
    11. printMes(undefined)

    类型别名

     当我们某些类型会重复使用时,我们可以抽取出来,设置类型别名

    1. type IdType = number | string | boolean
    2. function printId(id: IdType) {
    3. console.log(id);
    4. }
    5. printId(1)
    6. printId("22")
    7. printId(false)

    类型断言

    TypeScript只允许类型断言转换为 更具体 或者 不太具体 的类型版本,此规则可防止不可能的强制转换

    1. class Person {
    2. }
    3. class Student extends Person {
    4. study() {
    5. console.log("学生学习");
    6. }
    7. }
    8. function fun(item: Person) {
    9. (item as Student).study()
    10. }
    11. const stu1 = new Student()
    12. fun(stu1)
    13. // 不建议的做法
    14. const message: string = "hello"
    15. const num1: number = (message as any) as number

     还有一个较多的应用场景是js获取dom元素,比如getElementById()ts显示是HTMLElement对象,可以使用断言,断言成具体的,从而添加属性或使用方法

    非空类型断言

     ! 表示可以确定某个标识符是有值的,跳过ts在编译阶段对他的检测

    1. // 这种情况下是编译阶段报错的
    2. function printMes(message?: string) {
    3. // console.log(message.length);
    4. }
    5. // 使用非空断言 !
    6. function printMes2(message?: string) {
    7. console.log(message!.length);
    8. }
    9. printMes2("xxx")

    可选链

    es11新增特性,非ts独有

    当获取对象某个属性时,为undefined就短路,后面不执行了,返回undefined,存在就继续运行

    1. type Person = {
    2. name: string,
    3. friend?: {
    4. name: string,
    5. age: number
    6. }
    7. }
    8. const info: Person = {
    9. name: "yun"
    10. }
    11. console.log(info.name);
    12. // info.friend是可选的,存在undefined的情况,使用可选链,没有值就短路,返回undefined
    13. console.log(info.friend?.name);

    ??与!!运算符

    js的特性,并非ts语法

    1. // !!
    2. // js的特性,一个!是非操作,相当于把一个值变为布尔类型并取反,所以两个!就算是把一个值变为布尔类型
    3. const message: string = "shi yun ya"
    4. const flag: boolean = !!message
    5. console.log(flag);
    6. // ??
    7. // 逻辑操作符 ??左侧有值就使用左侧的值,没值就使用右侧的值
    8. const bol: string = message??""
    9. console.log(bol);

    字面量类型

    除了前面所示类型,我们还可以使用字面量类型,字面量类型顾名思义就是以值为类型,所以必须与值保持一致

    意义:与联合类型使用,可以把范围锁更小

    1. // const message = "shi yun ya"
    2. let message: "shi yun ya" = "shi yun ya"
    3. // message = "hahaha" 报错
    4. // 应用场景,align只能选择声明的四个值
    5. let align : 'left'|'right'|'top'|'bottom' = 'left'
    6. align = 'right'

    字面量推理

  • 相关阅读:
    童装业务占比扩大,APS生产排产解决服装企业生产管理难题
    KMP算法
    7.Docker 常规软件安装
    《ElementUI 基础知识》el-tree 之“我的电脑”目录结构效果
    worthington细胞分离优化技术:优化策略
    【无标题】
    学习c语言中的几道习题(小有难度)!
    Pytorch--3.使用CNN和LSTM对数据进行预测
    华为OD机试 - 数字排列(Java & JS & Python & C & C++)
    【微信小程序】博客小程序,静态版本(二)引入 lin-ui 组件、设计和开发文章页
  • 原文地址:https://blog.csdn.net/yunbabac/article/details/126039853