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

news2024/11/17 5:37:31

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:string
  table?: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类型,不会修改值的类型

// 类型断言 as

let 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.coloradmin.cn/o/1882904.html

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

相关文章

【支撑文档】系统安全保证措施(word原件)

软件安全保证措施word 软件所有全套资料获取进主页或者本文末个人名片直接。

CesiumJS【Basic】- #037 绘制轮廓线(Entity方式)

文章目录 绘制轮廓线(Entity方式)1 目标2 代码2.1 main.ts绘制轮廓线(Entity方式) 1 目标 使用Entity方式绘制轮廓线 2 代码 2.1 main.ts import * as Cesium from cesium;const viewer = new Cesium.Viewer(<

DP V2.1a标准学习

一、说明 DP是DisplayPort的简写,是视频电子标准协会(VESA)标准化的数字式视频接口标准,可用于板内芯片之间的连接,也可用于输出接口连接外部设备。DisplayPort是一种基于数据包的可扩展协议,用于传输视频和音频数据。DisplayPort 具有高度可扩展性,并具有保持向后兼容…

vue+js实现鼠标右键页面时在鼠标位置出现弹窗

首先是弹窗元素 <div class"tanchuang move-win1"id"tanchuang1"><el-button>111</el-button></div>然后在需要弹窗的地方监听点击事件&#xff0c;可以将这个方法写在页面载入事件中 // 获取弹窗元素 var tanchuang document.…

MySQL之高可用性(四)

高可用性 故障转移和故障恢复 冗余是很好的技术&#xff0c;但实际上只有在遇到故障需要恢复时才会用到。(见鬼&#xff0c;这可以用备份来实现)。冗余一点儿也不会增加可用性或减少宕机。在故障转移的过程中&#xff0c;高可用性是建立在冗余的基础上。当有一个组件失效&…

STM32系列-时钟系统

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 时钟的时钟源 HSI振荡器时钟HSE振荡器时钟PLL 时钟 STM32中的系统时钟可被内部高速时钟&#xff08;HSI&#xff09;&#xff0c;外部高速时钟&#xff08;HSE&#xff09;和PL…

模型部署:C++libtorch实现全连接模型10分类和卷积模型ResNet18的四分类的模型部署推理

Clibtorch实现模型部署推理 模型 全连接模型&#xff1a;公开mnist手写识别数字的十分类卷积模型&#xff1a;自行采集的鲜花四分类 部署 语言环境&#xff1a;C 对比Python python是解释性语言&#xff0c;效率很慢&#xff0c;安全性很低 系统开发一般是java、C/C&…

示例:WPF中推荐一个Diagram开源流程图控件

一、目的&#xff1a;分享一个自研的开源流程图控件 二、使用方法 1、引用Nuget包&#xff1a; 2、添加节点列表和绘图控件 <DockPanel><ItemsControl DockPanel.Dock"Left"><h:GeometryNodeData Text"节点"/></ItemsControl><…

Magic aura skill VFX(魔法光环技能)

-----魔法光环技能VFX PACK----- 我们为您提供了一种新的高质量资产。MOBA和RPG的理想选择!享受 ------------------------ --------功能---------- 18个粒子预制件 1024*1024 + 512*512效果纹理 适用于VR、PC和移动设备 包括场景 包括后处理 AAA-质量 适用于Unity 2018.3 ===…

Nature 正刊!全球200多位研究人员基于17738个森林样地数据集发现生物多样性可以防止非本地树种的入侵

本文首发于“生态学者”微信公众号&#xff01; 2023年8月23日&#xff0c;由苏黎世联邦理工学院领衔的全球超过200多位研究人员的团队首次探索了地球上哪些地区最容易受到非本地树木的入侵。这项研究以题为“Native diversity buffers against severity of non-native tree i…

安防监控视频平台LntonCVS视频监控汇聚平台视频监控系统组成部分介绍

安防视频监控平台LntonCVS以其强大的拓展性、灵活的视频能力和轻便的部署方式著称。它支持多种主流标准协议&#xff0c;如国标GB28181、RTSP/Onvif、RTMP等&#xff0c;同时也能接入厂家的私有协议和SDK&#xff0c;如海康Ehome、海大宇等设备的SDK。除了传统的安防视频监控功…

【开放词汇分割】Side Adapter Network for Open-Vocabulary Semantic Segmentation

论文链接&#xff1a;Side Adapter Network for Open-Vocabulary Semantic Segmentation 代码链接&#xff1a;https://github.com/MendelXu/SAN 作者&#xff1a;Mengde Xu,Zheng Zhang,Fangyun Wei,Han Hu,Xiang Bai 发表单位&#xff1a;华中科技大学、微软亚洲研究院 会…

CesiumJS【Basic】- #039 绘制渐变线(Entity方式)- 需要自定义着色器

文章目录 绘制渐变线(Entity方式)- 需要自定义着色器1 目标2 代码2.1 main.ts绘制渐变线(Entity方式)- 需要自定义着色器 1 目标 使用Entity方式绘制渐变线 2 代码 2.1 main.ts import * as Cesium from cesium;const viewer = new Cesium.Viewer

[工业网络][2] 安全背景知识

安全背景知识 物理、网络和人员安全 在考虑企业和工业的安全性时&#xff0c;安全从业人员传统上将自己划分为三个专业领域。我们借助于安全中经常使用的两个术语来描述这三个领域 业内人士。属于您的设施的人员&#xff0c;包括员工和受邀承包商&#xff0c;访客或交付和服…

docker部署wg-easy和firefly

Background WireGuard是一种新型的VPN协议,它通过在内核层运行,提供高效、安全、简单和现代的VPN解决方案。wg-easy是一个专为简化 WireGuard VPN配置和管理而设计的工具&#xff0c;提供了界面化的管理&#xff0c;进一步降低WireGuard 的使用门槛&#xff0c;让用户无需深入了…

【总线】AXI4第四课时:握手机制详解

大家好,欢迎来到今天的总线学习时间!如果你对电子设计、特别是FPGA和SoC设计感兴趣&#xff0c;那你绝对不能错过我们今天的主角——AXI4总线。作为ARM公司AMBA总线家族中的佼佼者&#xff0c;AXI4以其高性能和高度可扩展性&#xff0c;成为了现代电子系统中不可或缺的通信桥梁…

【大模型系列】Language-Vision Transformer(LaVIT, ICLR2024)

Title&#xff1a;Unified Language-Vision Pretraining in LLM with Dynamic Discrete Visual TokenizationPaper&#xff1a;https://arxiv.org/abs/2309.04669Github&#xff1a;https://github.com/jy0205/LaVITAuthor&#xff1a;Yang Jin&#xff0c; 北大&#xff0c;快…

谈谈创意设计中的AI、AGI、AIGC

在当今的数字化时代&#xff0c;创意设计领域正经历着前所未有的变革。随着人工智能&#xff08;AI&#xff09;、通用人工智能&#xff08;AGI&#xff09;以及人工智能生成内容&#xff08;AIGC&#xff09;的迅猛发展&#xff0c;设计师们的工作方式和创作手段都发生了深刻的…

【CSAPP】-datalab实验

实验原理与内容 本实验每位学生拿到一个datalab-handout.tar文件。学生可以通过U盘、网盘、虚拟机共享文件等方式将其导入到Unbuntu实验环境中&#xff0c;选择合适位置存放。然后在Ubuntu环境下解压。解压后&#xff0c;根据文件中的叙述和要求更改bits.c文件。本次实验的主要…

奇瑞员工控诉强制加班,加班费最多10元;高德数据被不正当抓取,一审判赔1250万元;知乎入局AI搜索;苹果手机出货量激增

一、商业圈 1.奇瑞员工控诉非法加班&#xff1a;加班费最多10元 根据脉脉平台热搜&#xff0c;近期&#xff0c;有多位网友曝奇瑞上海属地员工发起多项投诉&#xff0c;控诉奇瑞非法加班。据悉&#xff0c;奇瑞汽车正在积极准备上市中&#xff0c;若此事未得到妥善解决&#xf…