zoukankan      html  css  js  c++  java
  • TypeScript 之 基础类型、高级类型

    1. 在元素类型后面接上[]
      let list: number[] = [1, 2, 3];
    2. 使用数组泛型,Array<元素类型>
      let list: Array<number> = [1, 2, 3];
    • 元组(Tuple):
      元组类型表示一个已知元素数量和类型的数组,各元素的类型不必相同。 比如,你可以定义一对值分别为string和number类型的元组。
    // Declare a tuple type
    let x: [string, number];
    // Initialize it
    x = ['hello', 10]; // OK
    
    • enum类型是对JavaScript标准数据类型的一个补充。
    enum Color {Red, Green, Blue};
    let c: Color = Color.Green;
    
    • void:
      void类型的变量,只能为它赋予undefined和null

    • null 和 undefined
      默认情况下null和undefined是所有类型的子类型。 就是说你可以把null和undefined赋值给number类型的变量。
      然而,当你指定了--strictNullChecks标记,null和undefined只能赋值给void和它们各自。 这能避免很多常见的问题。 也许在某处你想传入一个string或null或undefined,你可以使用联合类型string | null | undefined。

    • 类型断言
      类型断言 告诉编译器,“就要用我指定的类型”。
      类型断言好比其它语言里的类型转换,但是不进行特殊的数据检查和解构。 它没有运行时的影响,只是在编译阶段起作用。 TypeScript会假设你,程序员,已经进行了必须的检查。
      类型断言有两种形式。 其一是“尖括号”语法:

    let someValue: any = "this is a string";
    let strLength: number = (<string>someValue).length;
    

    另一个为as语法(推荐):

    let someValue: any = "this is a string";
    let strLength: number = (someValue as string).length;
    

    两种形式是等价的。然而,当你在TypeScript里使用JSX时,只能使用 as语法断言。

    • 联合类型
      联合类型表示一个值可以是几种类型之一。 用竖线(|)分隔每个类型,所以number | string | boolean表示一个值可以是number,string,或boolean。
      如果一个值是联合类型,我们只能访问此联合类型的所有类型里共有的成员。

    • 用户自定义的类型保护
      通过 类型保护,我们只要检查一次类型,就能够在后面的每个分支里清楚变量的类型。
      类型保护就是一些表达式,它们会在运行时检查以确保在某个作用域里的类型。 要定义一个类型保护,我们只要简单地定义一个函数,它的返回值是一个类型断言:

    function isFish(pet: Fish | Bird): pet is Fish {
        return (<Fish>pet).swim !== undefined;
    }
    

    在这个例子里,pet is Fish就是类型断言。 一个断言是parameterName is Type这种形式,parameterName必须是来自于当前函数签名里的一个参数名。

    • typeof类型保护
      typeof类型保护,只有2种形式能被识别:typeof v === "typename"typeof v !== "typename","typename"必须是"number","string","boolean"或"symbol"。
      但是TypeScript并不会阻止你与其它字符串比较,或者将它们位置对换,且语言不会把它们识别为类型保护。

    • instanceof类型保护
      instanceof类型保护是通过其构造函数来细化其类型。
      举例:Dog instanceof Animal

    • 交叉类型
      例如Person & Serializable & Loggable,同时是Person和Serializable和Loggable。

    • 类型别名
      类型别名,会给一个类型起个新名字。 类型别名有时和接口很像,但是可以作用于原始值,联合类型,元组以及其它任何手写的类型。

    • 字符串字面量类型
      字符串字面量类型,允许你指定字符串必须的固定值。 在实际应用中,字符串字面量类型可以与联合类型,类型保护和类型别名很好的配合。 通过结合使用这些特性,你可以实现类似枚举类型的字符串。
      type Easing = "ease-in" | "ease-out" | "ease-in-out";
      字符串字面量类型,还可以用于区分函数重载。

    • 多态的this类型
      多态的this类型,表示的是某个包含类或接口的子类型。 这被称做F-bounded多态性。 它能很容易的表现连贯接口间的继承。

  • 相关阅读:
    DockerFile 解析
    Docker 容器数据卷
    Docker 镜像
    Docker 常用命令
    Docker 安装
    vue全站式笔记
    接口环境配置
    前端跨域的三种方式
    vue+axios 模拟后台返回数据的三种方式:本地创建json、easymock平台、mockjs
    cookie、sessionStorage与localStorage是什么?
  • 原文地址:https://www.cnblogs.com/cag2050/p/9547320.html
Copyright © 2011-2022 走看看