TypeScript基础 2

简介: TypeScript基础

六、任意值

任意值(Any)用来表示允许赋值为任意类型。

1、什么是任意值类型

如果是一个普通类型,在赋值过程中改变类型是不被允许的:

let myFavoriteNumber: string = 'seven';
myFavoriteNumber = 7;

但如果是 any 类型,则允许被赋值为任意类型。

    let myFavoriteNumber: any = 'seven';
    myFavoriteNumber = 7;

    2、任意值的属性和方法

    在任意值上访问任何属性都是允许的:

    let anyThing: any = 'hello';console.log(anyThing);
    console.log(anyThing.myName);

    可以认为,声明一个变量为任意值之后,对它的任何操作,返回的内容的类型都是任意值。

    3、未声明类型的变量

    变量如果在声明的时候,未指定其类型,那么它会被识别为任意值类型:

      let something;
      something = 'seven';
      something = 7;

      七、类型推论

      以下代码虽然没有指定类型,但是会在编译的时候报错:

        let myFavoriteNumber = 'seven';
        myFavoriteNumber = 7;

        事实上,它等价于:

          let myFavoriteNumber: string = 'seven';
          myFavoriteNumber = 7;
          TypeScript 会在没有明确的指定类型的时候推测出一个类型,这就是类型推论。

          如果定义的时候没有赋值,不管之后有没有赋值,都会被推断成 any 类型而完全不被类型检查:

            let myFavoriteNumber;
            myFavoriteNumber = 'seven';
            myFavoriteNumber = 7;

            八、联合类型

            联合类型(Union Types)表示取值可以为多种类型中的一种。

            1、简单例子

            let myFavoriteNumber: string | number;
            myFavoriteNumber = 'seven';
            myFavoriteNumber = 7;
            let myFavoriteNumber: string | number;
            myFavoriteNumber = true;


            联合类型使用 | 分隔每个类型。

            这里的 let myFavoriteNumber: string | number 的含义是,允许 myFavoriteNumber 的类型是 string 或者 number,但是不能是其他类型。

            2、访问联合类型的属性或方法

            当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问此联合类型的所有类型里共有的属性或方法

            function getLength(something: string | number): number {
                return something.length;
            }

            上例中,length 不是 stringnumber 的共有属性,所以会报错。

            访问 stringnumber 的共有属性是没问题的:

              function getString(something: string | number): string {
                  return something.toString();
              }

              联合类型的变量在被赋值的时候,会根据类型推论的规则推断出一个类型:

                let myFavoriteNumber: string | number;
                myFavoriteNumber = 'seven';
                console.log(myFavoriteNumber.length); // 5
                myFavoriteNumber = 7;
                console.log(myFavoriteNumber.length); // 编译时报错

                上例中,第二行的 myFavoriteNumber 被推断成了 string,访问它的 length 属性不会报错。

                而第四行的 myFavoriteNumber 被推断成了 number,访问它的 length 属性时就报错了。

                下一篇文章继续更新TypeScript类型定义-升级篇

                交流

                我是老礼,公众号「进军全栈攻城狮」作者 ,对前端技术保持学习爱好者。我会经常分享自己所学所看的干货,在进阶的路上,共勉!

                相关文章
                |
                5月前
                |
                数据处理
                CUT&Tag 分析教程 | 完结撒花
                CUT&Tag 分析教程 | 完结撒花
                CUT&Tag 分析教程 | 完结撒花
                |
                11月前
                |
                Java Kotlin
                Kotlin - 区间与数组
                Kotlin - 区间与数组
                84 6
                |
                机器学习/深度学习 计算机视觉
                【YOLOv8改进 - 注意力机制】ECA(Efficient Channel Attention):高效通道注意 模块,降低参数量
                YOLO目标检测专栏聚焦模型创新与实战,介绍了一种高效通道注意力模块(ECA),用于提升CNN性能。ECA仅用少量参数实现显著性能增益,避免了维度缩减,通过1D卷积进行局部跨通道交互。代码实现展示了一个ECA层的结构,该层在多种任务中展现优秀泛化能力,同时保持低模型复杂性。论文和代码链接分别指向arXiv与GitHub。更多详情可查阅CSDN博主shangyanaf的相关文章。
                |
                JSON 数据格式 网络架构
                Kettle使用接口获取数据(九)
                Kettle使用接口获取数据(九)
                1303 1
                Kettle使用接口获取数据(九)
                |
                安全 Java
                解决多线程间共享变量线程安全问题的大杀器——ThreadLocal(上)
                解决多线程间共享变量线程安全问题的大杀器——ThreadLocal
                582 0
                解决多线程间共享变量线程安全问题的大杀器——ThreadLocal(上)
                |
                区块链 安全 数据安全/隐私保护
                区块链LP流动性SWAP博饼交易所系统开发分析模式
                Web3在生态的每一个要素中,都体现出了去中心化的特点。
                |
                人工智能 运维 Prometheus
                《2021 阿里云可观测技术峰会演讲实录合辑(上)》——四、阿里云ACK容器服务生产级可观测体系建设实践【下】
                《2021 阿里云可观测技术峰会演讲实录合辑(上)》——四、阿里云ACK容器服务生产级可观测体系建设实践【下】
                278 0
                |
                C语言 C++
                【C语言】深入理解注释
                我们知道一个源文件要变成可执行程序的话,首先要经过预处理,预处理阶段完成的任务包括:头文件展开、宏替换、条件编译、去掉注释。
                |
                存储 移动开发 前端开发
                Vue-Router 前端路由实现的思路
                Vue-Router 前端路由实现的思路
                247 0
                Vue-Router 前端路由实现的思路
                |
                消息中间件 存储 弹性计算
                可观测实践|如何利用 Prometheus 精细化观测云产品
                随着企业使用越来越多的云产品,如何监控不同云产品运行状态,又该如何建立统一大盘,不妨看看如何通过阿里云Prometheus解决上述问题。
                可观测实践|如何利用 Prometheus 精细化观测云产品