首页 > 其他分享 >TS-TypeScript学习_1

TS-TypeScript学习_1

时间:2024-02-05 16:44:41浏览次数:31  
标签:TypeScript name peopleInfo 18 TS number 学习 interface type

1、推断类型

const nameInfo: string = 'Hello world'

console.log('nameInfo', nameInfo)

2、定义类型

interface nameType {
  name: string;
  age: number;
}

const peopleInfo: nameType = {
  name: 'libai',
  age: 18
}

console.log('peopleInfo', peopleInfo)

 注:Type and Interface 的异同点

  • 相同点
    • 都可以用于描述函数、对象;都可以扩展
  • 不同点
    • Interface 可以使用 extends 和 implements(Type只能通过交叉类型实现 extends 行为)
      • interface IPeople { name: string }
        interface peopleInfo extends IPeople { age: number }
        let people: peopleInfo = { name: '李白', age: 18 }
      • type TPeople = { name: string }
        
        interface peopleInfo extends TPeople { age: number }

        let people: peopleInfo = { name: '李白', age: 18 }
      • type TPeople = { name: string }
        // type交叉类型
        type peopleInfo = TPeople & { age: number }
    • Interface 可以 声明合并 
      • interface peopleInfo = { name: string }
        
        interface peopleInfo = { age: number }
        
        let people: peopleInfo = { name: '李白', age: 18 }
    • Type 可以定义字符串字面量联合类型
      • type TPosition = 'left' | 'right' | 'top' | 'bottom'
        let positionInfo: TPosition = 'left' type TValue = string | number | boolean
        let numInfo: TValue = 18
    • Interface: 通过interface声明的接口,或者说声明的变量,它在声明的那一刻并不是最终类型,由于interface可以进行声明合并,所以它在创建后是可变的,可以将新成员添加到同一个interface中

    • Type: 类型别名不会创建类型,它只是创建了一个新名字来引用那个类型,其实就是一个对象字面量类型,所以类型别名一旦声明就无法更改它们

3、组合类型

  使用 TypeScript,你可以通过组合简单类型来创建复杂类型。有两种流行的方法可以做到这一点:联合和泛型。

  • 联合
    • 使用联合,你可以声明一个类型可以是多种类型之一。例如,你可以将 boolean 类型描述为 true 或 false。
      type MyBool = true | false
       type WindowStates = "open" | "closed" | "minimized"     type LockStates = "locked" | "unlocked"   type PositiveOddNumbersUnderTen = 1 | 3 | 5 | 7 | 9
  • 泛型
    • 泛型为类型提供变量。一个常见的例子是数组。没有泛型的数组可以包含任何东西。具有泛型的数组可以描述数组包含的值。
      • function peopleInfo<T>(value: T): T { return value }
        
        peopleInfo<number>(18)
        
        // 泛型传入 number 则 T 代表的数据类型 为 number
      • interface peopleInfo<T> {
            name: T,
            nameList: T[],
            handleName: (value: T) => void
        }
        
        const people: peopleInfo<string> = {
            name: '李白',
            nameList: [ '李白', '篱笆' ],
            handleName: (value: string) => { console.log(value) }
        }

        people.handleName('18')

        // 18 字符串
      • interface numInfo {
          length: number
        }
        
        function num<T extends numInfo>(value: T) {
          return value.length
        }
        
        console.log('num', num('18'))
        // 2
        
        console.log('num', num([{ a: 1}, { b: 2} ]))
        // 2
        
        console.log('num', num({ length: 5, b: '2', c: 3 }))
        // 5

标签:TypeScript,name,peopleInfo,18,TS,number,学习,interface,type
From: https://www.cnblogs.com/kcy19961021/p/18006360

相关文章

  • Eralng 学习笔记第六天, Fun,进程,电子邮件,数据库,端口
    ErlangFun  示例:-module(helloworld). -export([start/0]). start() ->    A = fun(X) ->       io:fwrite("~p~n",[X])       end,    A(5).输出5----------------------------------------------------module(helloworld). -export(......
  • SSTS兼容Chrome方案
    1.核心架构级代码(1)公共引用《common.js》通过本地Http服务,模拟ActiveXObject(包括Scripting.FileSystemObject、WScript.shell等)《web.webkit.js》该文件为新增,兼容IE和Chrome同步对象和数据、调用公共组件(供Index.html、一级frames等页面引用)《web.system.js》页面加载时调WebTool......
  • Netsuite 官方解答渠道
    https://nlcorp.extforms.netsuite.com/app/site/crm/externalcasepage.nl?compid=NLCORP&formid=203&h=AAFdikaIO4S1EChHN12RnhSbV6RPuAQyeH7t77JPbej9kLQm8_E&custentity73=8801598&companyname=8801598+%25u5510%25u52BF%25uFF08%25u4E0A%25u6D77%25uFF09%......
  • kettle 数据转换学习
    案例1:  把excel数据抽取到mysql数据库表中 步骤1:编辑EXCEL输入控件选择要抽取的excel文件,并指定哪些字段需要抽取 步骤2: 按照图示步骤操作,最后点击确定设置Mysql的字符集编码characterEncoding          utf8 选择要写入的目标表 ......
  • Eralng 学习笔记第五天, 异常,宏,头文件,预处理器,模式匹配
    Erlang异常在Erlang中,有3种例外类型-Error−调用将终止当前进程的执行,并在捕获到最后一个函数及其参数时包含堆栈跟踪。这些是引发上述运行时错误的异常。erlang:error(Reason)Exists −有两种Exists:内部退出和外部退出。内部退出通过调用函数exit/1来触发,并使当前进......
  • 在网站项目中引用 Bootstrap 5字形图标
    Bootstrap图标库是由Bootstrap团队官方维护的免费、开源、高质量图标库,可以以SVG矢量图、SVGsprite或web字体三种形式来使用。截止2024年2月,Bootstrap5 1.11.3版中有2054多个字形图标,该图标库正在不断丰富中。在Visualstudio中创建ASP.NETCore或者MVC项目模板中,并......
  • 《视频篇》java实现下载hls(m3u8+ts)实时流并进行合并mp4
    链接:https://blog.csdn.net/qq_41604890/article/details/130143355首先需要了解什么是HLS简单理解就是,m3u8文件存放着可供客户端播放TS片段简单一点说m3u8加密技术就是将原视频分割成n个.ts文件,并用一个key文件对每一个.ts文件加密,其中m3u8文件里面存储了key文件和所有的.t......
  • 云原生学习第4天笔记
    云原生技术栈容器技术:Docker、containerd容器编排:Kubernetes、Swarm、Mesos微服务架构:SpringCloud、Dubbo服务发现与负载均衡:Consul、Nginx配置管理:Consul、Etcd存储技术:Ceph、MinIO监控与日志:Prometheus、Grafana、ELK云原生数据库:Cassandra、MongoDB、PostgreSQL云原生应用架构......
  • Erlang 学习之第四天 . 列表,文件,原子,映射,元组,记录
    Erlang列表列表属于数据类型里面的集合, 列表是用于存储数据项集合的结构。在Erlang中,列表是通过将值括在方括号[]中来创建的。实例:  start() ->    Lst1 = [1,2,3],    io:fwrite("~w~n",[Lst1]).输出结果是:[123]以下是列表的方法说明:all: ......
  • 学习笔记——割点与桥
    一、割点、桥基本概念给定无向图\(G=(V,E)\)。对于一个点\(u\inG\),删除一个节点\(u\)与该节点所有相连的边后,该图不连通,则称点\(u\)为割点。对于一条边\(\{U,W\}\inG\),删除一条边\(\{U,W\}\)后,该图不连通,则称边\(\{U,W\}\)为桥。二、暴力算法对于割点,枚举每个......