ts语法---数据类型,interface和type的用法

ts的数据类型

ts的数据类型自上而下的分级有

第一层 any-任意类型和unknow类型,

第二层 原型链的Object类型,

第三层 js类的类型

第四层 标准的typescript类型

第五层 对应的实例数据类型

第六层 never类型,never表示不合理,不存在的类型,不能被任何值赋值,

这里的分层表示,上面的类型包括了下面的类型,例如,any类型在最顶层可以赋值任何数据类型,字符串,数字,对象等等

any ,unknow和Object

any表示任意类型,当一个变量标注为any时,就相当于一个js的变量,可以赋值任意值

unknow表示未知类型,定义时可以赋值任意值,但后续不可再赋值和引用

Object和object,{}

Object表示js原型链上的类型,所有数据类型都会指向 Object,所以这里的Object并不是单指一个对象

object 表示的是对象类型,只允许引用数据类型,对象或者数组、函数,object,function,array...,

{} 相当于js中的 new Object()和Object相同


// Object 和object 的区别
// Object 是原型链上的Object类型,所有数据类型都会指向 Object
// object 表示的是对象类型,只允许引用数据类型,对象或者数组、函数let a:Object = {name:'tom',age: 18,
};
let a1:Object = '';
let a2:Object = 10;
let a3:Object = [];
let a4:Object = ()=>{};console.log(a)let b:object = {};
let b1:object = [];// {} 和 Object 的效果相同,相当于 new Object();
let c:{} = {name:'tom',age: 18,
};
let c1:{} = '';
let c2:{} = [];
let c3:{} = 10;
let c4:{} = ()=>{};

 never

never表示不合理,不存在状态的类型,不能被任何值赋值,

void类型和 never类型,void表示空没有值,never表示不合理不应该存在,void不是错误,只是刚好没有,never提示错误,表示此处类型不合理

never的用法,提示错误

// never 类型表示不应该存在状态的类型,type M = number & string; // 不合理的类型
type Q = number | string | never; // never被忽略type K = '唱' | '跳' | 'rap';function kun(value: K) {switch (value) {case '唱':break;case '跳':break;case 'rap':break;default://此处不应该被触发,否则报错// 当K新增类型时,会触发对never类型赋值产生错误,提示此处逻辑应该更新const a: never = value;}}

当K新增类型时,会触发对never类型赋值产生错误,提示此处逻辑应该更新

定义类型:interface和type

interface

  1. interface是接口,它可以规定对象的属性类型和函数的参数类型和返回值类型,
  2. interface定义类型约束,和实例必须一一对应,不能少属性,也不能多属性(命名应该以大写开头)
  3. interface可以重名接口,会将两个接口内的属性进行合并
  4. ?:可选属性,实例内可以有也可以没有
  5. 索引签名,可以定义一个索引,定义key的类型和value的类型,value一般定义为any(如果为number之类的属性,则所有值都只能为number),表示可以定义任意类型的值,(可多不可少)
  6. 在属性前定义readonly,则定义后属性不可修改

  7. interface可以继承,继承后可以重写属性

  8. interface定义函数类型,接受参数和返回参数类型

 


// interface定义类型约束,和实例必须一一对应,不能少属性,也不能多属性(命名应该以大写开头)
// interface可以重名接口,会将两个接口内的属性进行合并
// ?:可选属性,实例内可以有也可以没有
// 索引签名,可以定义一个索引,定义key的类型和value的类型,value一般定义为any(如果为number之类的属性,则所有值都只能为number),表示可以定义任意类型的值,(可多不可少)
// 在属性前定义readonly,则定义后属性不可修改
// interface可以继承,继承后可以重写属性
// interface定义函数类型,接受参数和返回参数类型interface Fn{// 接受一个string类型的参数,返回一个string类型的参数(name:string):string
}interface P{name:string,age:number,[key:string]:any,// 表示可以添加任意的string类型属性key,和任意类型属性值,但是接口内必须要有其他的属性(可多不可少)readonly getName:()=>string ,//内置函数一般不可修改设置为只读
} 
interface P{address:stringtable?:number// 会整合成一个P
}let person:P ={name:"John",age:30,address: 'home',getName:function(){return this.name}
} 

联合类型,和交叉类型,类型断言,内置对象类型

联合类型 | :表示可以接受两个类型中的任意一个类型的值

// 联合类型 |let phone: string | number ;//表示可以接受两个类型中的任意一个类型的值
phone = 10086 ;
phone = '10086';let f = function(type:number | boolean):boolean{return !!type;// !0 ==> true// !1 ==> false// !!0 ==> false// !!1 ==> true
}console.log(f(0));
console.log(f(1));
console.log(f(true));

 交叉类型 &:要同时满足两个接口的类型值

// 交叉类型 &interface People {name:string;age:number;
}interface Man {gander:number
}const one = (man:People & Man):void => { // 要同时满足两个接口的类型值console.log(man);
}one({name:'shy',age:18,gander:1
})

 类型断言 as,让编译器认定num是string类型,不会修改值的类型

// 类型断言 aslet fun = function(num:number | string):void{// 联合类型只提示两种类型共有的方法属性console.log((num as string).length);// 类型断言,让编译器认定num是string类型,不会修改值的类型
}
fun('10086')

 内置对象类型:js中new关键字构造的对象,以及window浏览器对象的类型

// 内置对象类型// new关键字构造的对象,
// windows的对象
// dom对象
// promise类型let num:Number = new Number(100);//使用的是什么类型定义就是什么类型
let str:String = new String('10086');//浏览器对象
// let xml:XMLHttpRequest = new XMLHttpRequest();
// let local:Storage = localStorage;// 本地存储
// let session:Storage = sessionStorage;// 本地存储
// let lo:Location = window.location;
// let cookie:string = document.cookie;//cookie就是字符串类型// HTML(元素的名称)Element,HTMLElement,NodeList,NodeListOf<HTML(元素的名称)Element>
// let div:HTMLDivElement|null = document.querySelector('div');// div特殊的dom对象
// let dom:HTMLElement | null = document.querySelector('header');// 一般的dom对象
// let divList:NodeList = document.querySelectorAll('div');// dom对象列表
// let domList:NodeListOf<HTMLDivElement|HTMLElement> = document.querySelectorAll('div,input');// dom对象列表// promise类型
let p:Promise<number> = new Promise(res => res(100));// 设置promise的类型和异步res的类型p.then(res=>{console.log( res.toFixed(2))
})

type

type关键字可以定义一个类型,类似于 const 定义值,和interface类似,但是interface只能定义对象的类型,而type不受限

类型推论 和 类型别名

编译器会自动将变量识别成明确赋值的类型,此时不能将其赋值成其他类型;当赋值的类型不明确时,变量会被识别成any类型(隐式any类型)

 使用type可以定义类型,这里将n定义成了number类型(类型别名)

 

type和interface的区别

  • interface通过extend增加类型
  • type 通过联合类型增加类型
  • interface会自动融合同名接口

 

type的特殊用法

层级 关系可以查看第一张图,这里number是包含了数字1的(number类型可以赋值成1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/864417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

整除分块的题目

链接 思路&#xff1a; 求1到n中的因数个数和等价于求,设x为因子&#xff0c;就是求x在1到n里出现了几次&#xff0c;求1到n里是x的倍数的数有几个&#xff0c;即n/x。需要用整除分块&#xff0c;n/i的值是分块分部的&#xff0c;右端点是n/&#xff08;n/i&#xff09;。 代…

Application Studio 学习笔记(3)

一、工具栏按钮 1、panel控件添加工具栏按钮 展开panel控件的Advanced属性并点击Action Data&#xff0c;进入Action Data编辑界面 新增Action Data数据&#xff0c;Sequence设定工具按钮的显示顺序 默认工具按钮会显示在弹出工具栏中 勾选Add to Primary ToolBar后&#xff…

deepin基于apt-mirror同步软件源及构建本地内网源

1.安装apt-mirror sudo apt install -y apt-mirror2.配置apt-mirror(/etc/apt/mirror.list) sudo cp /etc/apt/mirror.list /etc/apt/mirror.list.deepin.bak #备份配置文件 sudo gedit /etc/apt/mirror.list修改如下&#xff1a; deb [trustedyes] https://mirrors.bfsu.ed…

Django学习第一天

Django安装&#xff1a; pip install Django -i https://mirrors.aliyun.com/pypi/simple/ 在需要创建文件的文件目录下写这个命令 django-admin startproject mysite 注意&#xff1a;C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Scripts已加入环境变…

JAVA:Word2Vec的使用

1、简介 Word2Vec是 Google 在 2013 年年中开源的一款将词表征为实数值向量的高效工具, 其利用深度学习的思想&#xff0c;可以通过训练&#xff0c;把对文本内容的处理简化为 K 维向量空间中的向量运算&#xff0c;而向量空间上的相似度可以用来表示文本语义上的相似度。 Wo…

windows USB设备驱动开发-双角色驱动

在USB的通讯协议中&#xff0c;规定发起连接的一方为主机(Host)&#xff0c;接受连接的一方为设备&#xff0c;这可以用U盘插入电脑举个例子&#xff0c;当U盘插入电脑后&#xff0c;电脑这边主动发起查询和枚举&#xff0c;U盘被动响应查询和数据存取。 USB 双角色驱动程序堆…

使用Qt designer辅助开发pyqt应用,如何将自定义组件添加到designer中

背景&#xff1a; 我想要实现列表项的拖拽功能&#xff0c;于是自定义类 MyListWidget 通过Qt designer生成的代码&#xff0c;使用的是原始类型 QListWidget 我需要手动修改 Ui_xxx.py文件&#xff1a; 1.导入MyListWidget 2.将QListWidget替换为MyListWidget #Ui_xxx.pyf…

Generating Diverse Structure for Image Inpainting With Hierarchical VQ-VAE

Jialun Peng1 Dong Liu1* Songcen Xu2 Houqiang Li1 1 University of Science and Technology of China 2 Noahs Ark Lab, Huawei Technologies Co., Ltd.pjlmail.ustc.edu.cn, {dongeliu, lihq}ustc.edu.cn, xusongcenhuawei.com 原文提供代码链接&#xff1a; GitHub - UST…

3款免费宝藏电脑软件,每一个都非常实用

LICEcap LICEcap是一款简洁易用的动画屏幕录制软件&#xff0c;主要功能是将屏幕录像的内容直接保存为高质量&#xff08;每帧颜色数量可超过256&#xff09;GIF动态图片格式。该软件安装包轻量级&#xff0c;不到500KB&#xff0c;运行后会以窗口的方式显示在桌面上&#xff…

分布式存储和分布式计算两个哪个更适合作为工作深入方向发展?

有朋友问&#xff0c;分布式存储比如hdfs&#xff0c;ceph&#xff0c;minio&#xff0c;tidb&#xff0c;glusterfs&#xff1b;分布式计算比如Hadoop&#xff0c;spark&#xff0c;flink&#xff1b;它们在实际工作中咋样&#xff1f;具体开发工作是啥&#xff1f;哪个更有发…

财务RPA与数字化转型——财务RPA如何促进企业的数字化转型

在数字化时代&#xff0c;企业面临着推动创新、提高效率的巨大挑战。RPA财务机器人作为智慧财务不可或缺的新动能&#xff0c;不仅能够优化财务流程&#xff0c;还能够在整个企业中引领数字化变革。本文金智维将深入探讨财务RPA如何成为企业数字化转型的战略利器&#xff0c;为…

【哈哈大一上学的全忘了,重开!!】STM32从零入门物联网开发

本笔记资料来源 &#xff1a;STM32物联网入门30步&#xff1d;单片机物联网入门教程 WIFI连接阿里云物联网CubeMXHAL库蓝牙ESP8266杜洋主讲_哔哩哔哩_bilibili IOT&#xff1a;Internet of things 学习目标&#xff1a; 1.掌握洋桃IoT开发板的各功能以及驱动与基本应用 2.掌…

docker 部署jitsi meet

1. 部署环境&#xff1a; 1.1 vm 虚拟机 安装的 centos 7 1.2 centos7安装docker 和 docker-compose 2.docker命令 官网部署文档地址&#xff1a;&#xff08;文档地址有可能失效&#xff09; Self-Hosting Guide - Docker | Jitsi Meet 2.1Download and extract the late…

1-3.文本数据建模流程范例

文章最前&#xff1a; 我是Octopus&#xff0c;这个名字来源于我的中文名–章鱼&#xff1b;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github &#xff1b;这博客是记录我学习的点点滴滴&#xff0c;如果您对 Python、Java、AI、算法有兴趣&#xff0c;可以关注我的…

基于隐马尔可夫模型的股票预测【HMM】

基于机器学习方法的股票预测系列文章目录 一、基于强化学习DQN的股票预测【股票交易】 二、基于CNN的股票预测方法【卷积神经网络】 三、基于隐马尔可夫模型的股票预测【HMM】 文章目录 基于机器学习方法的股票预测系列文章目录一、HMM模型简介&#xff08;1&#xff09;前向后…

全球首款搭载Google Gemini和GPT-4o的智能眼镜发布

智能眼镜仍然是一个尚未完全成熟的未来概念&#xff0c;但生成式人工智能的到来显著提升了这些设备的能力。Meta 的 Ray-Ban 智能眼镜被许多人视为当今最好的选择之一&#xff0c;而现在 Solos AirGo Vision 正在为其带来竞争&#xff0c;这款眼镜还集成了 Google Gemini 支持。…

生命在于学习——Python人工智能原理(3.1.1)

Python部分结束了&#xff0c;开始概率论部分 一、概率基本知识 1.1 事件与概率 1.1.1 事件的运算与关系 &#xff08;一&#xff09;基本概念 定义1 随机试验 如果一个试验满足如下条件&#xff1a; 在试验前不能断定其将发生什么结果&#xff0c;但可明确指出或说明试验…

浅聊JavaScript中的栈(stack)

前言 这篇文章结合leetcode题目讲解一下栈这种结构 第20题&#xff1a;20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; 第LCR-147题LCR 147. 最小栈 - 力扣&#xff08;LeetCode&#xff09; 栈&#xff08;stack&#xff09; 在讲解题目之前&#xff0c;我们先来…

HTTPS是什么?原理是什么?用公钥加密为什么不能用公钥解密?

HTTPS&#xff08;HyperText Transfer Protocol Secure&#xff09;是HTTP的安全版本&#xff0c;它通过在HTTP协议之上加入SSL/TLS协议来实现数据加密传输&#xff0c;确保数据在客户端和服务器之间的传输过程中不会被窃取或篡改。 HTTPS 的工作原理 客户端发起HTTPS请求&…

primetime中cell和net的OCV

文章目录 前言一、Cell OCV1. POCV coefficient file2. POCV Slew-Load Table in Liberty Variation Format&#xff08;LVF lib&#xff09; 二、Net OCV三、如何check OCV是否已加上&#xff1f;总结 前言 在生产中&#xff0c;外界环境的各种变化&#xff0c;比如PVT&#…