day50(vueJS)TypeScript(概念、优势、静态与动态类型、类型约束以及类型注解)

TypeScript介绍

  • 概念
  • 优势
  • 静态类型与动态类型
  • 类型约束 / 类型注解
    • 常规类型
    • 非常规类型
      • 数组类型
      • 对象类型
      • 万能类型
      • 函数类型
      • 使用reactive和ref的类型约束
      • 父对子传值时的类型约束

概念

	它是 JavaScript 的一个超集,支持 ECMAScript 6 标准,由微软公司开发的自由、开源的编
程语言,扩展了javaScript 得语法,它的设计目标是开发大型应用,全部浏览器兼容

优势

	JavaScript 发展迅速:TypeScript 可以帮你降低 JavaScript 弱语言的脆弱性,帮你减少由
于不正确类型导致错误产生的风险.需要强类型的 JavaScript:TypeScript 把高级语言的强类型引入 JavaScript ,解决了防止
在编写 JavaScript 代码时因为数据类型的转换造成的错误主流框架及最新特性的支持:Angular 2.0 版本就开始集成 TypeScript,React 、Vue也要加
入 TypeScript 的阵营,能用最新的语言特性,编写质量更高的 JavaScript

静态类型与动态类型

1.静态类型是在编译时进行类型检查的类型。// 声明变量 a 的类型为 numberlet a: number = 10;// 函数参数和返回值类型声明function add(x: number, y: number): number {return x + y;}// 接口定义对象的结构interface Person {name: string;age: number;}// 类型别名type Point = {x: number;y: number;};2.动态类型是在运行时确定类型的类型。// JavaScript 中的动态类型let b = 10; // b 可以随时被赋予不同类型的值b = 'hello'; // 合法,b 现在是一个字符串

类型约束 / 类型注解

常规类型

常规类型包括数字类型,字符串,布尔值,声明未赋值和赋空值五类内置基本类型的数据。
该类数据添加类型约束,统一的语法为:let 变量名:类型 =let a:boolean= false;
let num:number = 100;
let str:string = "过年好";
let u:undefined =undefined;----------类型约束为undefined,那么后续赋值就只能是undefinedlet n:null = null;-----------类型约束为null,那么后续赋值就只能是null

非常规类型

数组类型

数组类型添加类型约束,有两种写法(功能上无区别)
第一种声明方式(字面量方式)let 变量名:数据类型[]=[元素,元素,.....] 
第二种声明方式(泛型方式)let 变量名:Array<number>=[元素,元素,.....] let arr1: number[] = [1, 3, 5, 6, 100, '100'];
let arr2: Array<number> = [1, 3, 5, 6, 100, '100', [10, 20]];

对象类型

接口
1.使用interface 关键字来声明接口。
2.接口名称(比如,此处的IPerson),可以是任意合法的变量名称。
3.声明接口后,直接使用接口名称作为变量的类型。
4.如果每一行只有一个属性类型,因此,属性类型后没有;(分号)。
类型别名(自定义类型) : 为任意类型起别名。
使用场景: 当同一类型(复杂)被多次使用时,可以通过类型别名,简化该类型的使用。
interface(接口)和type(类型别名)的对比:
相同点: 都可以给对象指定类型。
不同点:接口,只能为对象指定类型。类型别名,不仅可以为对象指定类型,实际上可以为任意类型指定别名let person: { name: string; age: number; myName():string; myAge:()=>number } = { 
name: 'jack ' ,
age: 19,
myName (),
myAge()
}let person: { 
name: string
age: number
myName():string
myAge:()=>number 
} = { 
name: 'jack ' ,
age: 19,
myName (),
myAge()
}interface Person {---------当一个对象类型被多次使用时,一般会使用接口(( interface)来描述对象的类型,达到复用的目的
name: string      
age: number
sayHi: ()=> void
}
let person1: Person = { 
iname: 'jack' ,
age: 19,
sayHi()
}
let person2: Person = { 
iname: 'tom' ,
age: 20,
sayHi()
}type NArray = number[];----------类型别名
let arr1: NArray = [1,2,3,4]

万能类型

当一个变量的值源于用户输入、动态内容和第三方插件,在不清楚明确类型时,可以定义为 any 
型;当只知道一部分值的类型时,也可定义为 any 型let a1: any = {}

函数类型

void表示没有任何类型,常用于函数返回值(加了该类型约束的函数,没有返回值)
另外,在ts中函数的参数和返回值也需要指明类型function warnUser(): void {console.log("This is my warning message");}function fn(m:string):string{}let fn1: (m:string) =>string = (m) =>{return ``}

使用reactive和ref的类型约束

1.reactive的类型约束:::typescriptimport { reactive } from 'vue';interface User {name: string;age: number;}// 创建一个响应式的 User 对象const user: User = reactive({name: 'Alice',age: 25});2.ref的类型约束:::import { ref } from 'vue';// 创建一个响应式的数字const count = ref<number>(0);

父对子传值时的类型约束

1.父组件:::<!-- ParentComponent.vue --><template><ChildComponent :message="parentMessage" :count="parentCount" /></template><script lang="ts">import { defineComponent } from 'vue';import ChildComponent from './ChildComponent.vue';export default defineComponent({components: {ChildComponent},data() {return {parentMessage: 'Hello from parent',parentCount: 10};}});</script>2.子组件:::// ChildComponent.vueimport { defineComponent, PropType } from 'vue';export default defineComponent({props: {message: {type: String as PropType<string>, // 定义 message 属性的类型为 stringrequired: true // 可选,指定是否必填},count: {type: Number as PropType<number>, // 定义 count 属性的类型为 numberdefault: 0 // 可选,指定默认值}},setup(props) {// 使用 props.message 和 props.count 来访问传入的属性}});

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

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

相关文章

MySQL 新增用户及权限分配

场景&#xff1a; 给MySQL新增一个用户&#xff0c;并且该用户登陆后只能查看和操作有权限的数据库 1、创建用户user_luka, 密码pw123456&#xff0c;%表示所有主机&#xff0c;或者用户连接 MySQL 时所用主机IP&#xff0c;如果在创建的过程中&#xff0c;只给出了用户名&am…

高效备考一级数据分析师考试《CDA Level I 实操训练营》3月30日开课!

曾经报名了考试&#xff0c;买了教程辅导书&#xff0c;却因为各种原因没有坚持学习&#xff0c;这样的经历可能让你感到沮丧和失望。但是&#xff0c;失败并不代表终结&#xff0c;而是迈向成功的必经之路。为了帮助大家能够快速学习考试相关知识&#xff0c;特别为CDA LEVEL …

transformer--解码器

在编码器中实现了编码器的各种组件&#xff0c;其实解码器中使用的也是这些组件&#xff0c;如下图&#xff1a; 解码器组成部分: 由N个解码器层堆叠而成每个解码器层由三个子层连接结构组成第一个子层连接结构包括一个多头自注意力子层和规范化层以及一个残差连接第二个子层连…

HarmonyOS4.0入门学习需要学习哪些知识点呢?

HarmonyOS4.0入门学习需要学习哪些知识点&#xff1f;我们需要学习以下知识点&#xff0c;看看你都会吗? 01、HarmonyOS介绍 开发环境搭建 DevEco详解 目录介绍介绍 代码分析 02、HarmonyOS模拟器调试、真机调试 03、ArkTS页面布局 数据类型 条件判断 数组ForEach循环遍历 Lis…

小巧且强大,一键批量操作谁不爱?

软件简介&#xff1a; 软件【下载地址】获取方式见文末。注&#xff1a;推荐使用&#xff0c;更贴合此安装方法&#xff01; 两款Office批量打印工具展现了优秀的人性化设计&#xff1a;其界面清晰、操作简便。这些工具支持Word、Excel、PPT等多种文档格式进行批量打印&#…

VMware虚拟机安装linux教程

CentOS7下载 下载 (centos.org)https://www.centos.org/download/新建虚拟机 选择自定义安装 这里要注意兼容性&#xff0c;如果是VMware12创建的虚拟机复制到VM11、10或者更低的版本会出现一不兼容的现象。如果是用VMware10创建的虚拟机在VMware12中打开则不会出现兼容性问题…

洛谷: P1754 球迷购票问题

思路: 记忆化搜索。和洛谷上那道括号匹配的题几乎是一样的。 x是当前剩余50的数量&#xff0c;y是剩余100的数量。 纯暴力三个点超时&#xff0c;所以每次DFS完了&#xff0c;把当前找到的方式数量记录下来&#xff0c;不再重复的去DFS。 代码: #include <bits/stdc.h&g…

vue中使用echarts实现人体动态图

最近一直处于开发大屏的项目&#xff0c;在开发中遇到了一个小知识点&#xff0c;在大屏中如何实现人体动态图。然后看了下echarts官方文档&#xff0c;根据文档中的示例调整出来自己想要的效果。 根据文档上发现 series 中 type 类型设置为 象形柱形图&#xff0c;象形柱图是…

SpringCloud之Nacos入门与实战系列

目录 一、Nacos介绍 1.1、配置中心和注册中心的概念 1.2 Nacos 优点 二、Nacos的使用 2.1 以单机模式启动Nacos 2.2 Nacos部署方式介绍 2.3 配置数据源 2.4 开启控制台权限登录 三、配置中心的使用 3.1 创建配置信息 3.2 SpringBoot使用配置中心 四、注册中心的使用 4…

android 使用协程CoroutineScope 实现定时器

满足延迟执行、立即执行&#xff0c;每次任务间隔时长&#xff0c;总时长的任务 使用1 class TimeViewModel:Viewmodel(){//测试延迟5秒开始执行任务&#xff0c;然后每隔1秒执行1次&#xff0c;总执行时间60秒fun testTime(){var startTime System.currentTimeMillis()log(…

图书推荐|Word文稿之美

让你的文档从平凡到出众&#xff01; 本书内容 《Word文稿之美》是一本全面介绍Word排版技巧和应用的实用指南。从初步认识数字排版到高效利用模板、图文配置和表格与图表的排版技巧&#xff0c;再到快速修正错误和保护文件&#xff0c;全面系统地讲解数字排版的技术和能力&…

基于Docker部署本地ChatGPT环境

基于Docker部署本地ChatGPT环境 一、拉取镜像 docker pull pengzhile/pandora二、运行镜像 docker run -e PANDORA_CLOUDcloud -e PANDORA_SERVER0.0.0.0:8899 -p 8899:8899 -d pengzhile/pandora三、查看容器是否启动成功 docker ps四、登录 http://IP:8899 这里有两种方…

ssm+springboot音乐播放器网站mybatis+jsp

测试流程 &#xff08;1&#xff09; 登录系统、填写用户名、密码选择角色&#xff0c;主要内容&#xff1a;进行权限控制。 &#xff08;2&#xff09; 用户查看音乐信息、音乐资讯功能&#xff0c;主要是测试系统实用性、方便性。 &#xff08;3&#xff09; 信息修…

你喜欢在那种迷宫中探索呢?

迷宫中的探索者&#xff1a;程序员的多元职业赛道 在信息时代的洪流中&#xff0c;程序员们就像是勇敢的探险家&#xff0c;穿梭于由代码构建的迷宫之中。这座迷宫中&#xff0c;既有前端的绚烂花园&#xff0c;也有后端的深邃洞穴&#xff0c;更有数据科学的神秘密室。每个程…

Maven能解决什么问题?为什么要用?

如果没有maven&#xff0c;我们在开发一个应用的时候&#xff0c;需要自己先确定要引入哪些第三方的jar包&#xff0c;并且要去找到这些jar包&#xff0c;把他们导入到项目中&#xff0c;而且最痛苦的时候各个jar包之间的兼容性和冲突的问题。 jar包弄好了之后&#xff0c;我们…

mysql 8 修改账号密码

一 进入Mysql bin目录 cmd 运行&#xff08;跳过密码&#xff09;&#xff0c;运行完不要关闭 mysqld --console --skip-grant-tables --shared-memory 二 新打开一个cmd mysql bin 目录下登录&#xff0c;密码输入时&#xff0c;直接回车 mysql -uroot -p 三 修改密码 m…

【C++】类和对象之初始化列表与static成员

个人主页 &#xff1a; zxctscl 文章封面来自&#xff1a;艺术家–贤海林 如有转载请先通知 文章目录 1. 前言2. 再谈构造函数2.1 构造函数体赋值2.2 初始化列表2.3 explicit关键字 3. static成员3.1 概念3.2 特性 1. 前言 在前面的博客中已经分享有关构造函数 【C】构造函数和…

9.WEB渗透测试-Linux基础知识-Linux用户权限管理(上)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;8.WEB渗透测试-Linux基础知识-Linux基础操作&#xff08;二&#xff09;-CSDN博客 用户管…

kafka在linux环境下的执行命令

#创建topic /data/app/kafka/bin/kafka-topics.sh --create --bootstrap-server 127.0.0.1:8318 --replication-factor 1 --partitions 12 --topic yunpei-track --command-config /data/app/kafka/config/admin.conf #新增用户,新建用户mytest /data/app/kafka/bin/kafka-…

uniapp实现进度条组件

首先&#xff0c;在uniapp项目中创建一个自定义组件&#xff0c;可以命名为Progress.vue。在Progress.vue中&#xff0c;编写如下代码&#xff1a; <template><view class"progress"><view class"progress-bar" :style"{width: progr…