TS在实际开发中的使用
TS的基础使用
// 数字
let num = ref<number>(100)
// 文字
let str = rer<string>('文字')
// boolean
let bo = ref<boolean>(true)
// null
let n = ref<null>(null)
// undefined
let u = ref<undefined>(undefined)
// nan
let na = ref<NaN>(NaN)
// 任意类型
let a = ref<any>('任意类型')
数据类型不固定情况下的使用
// 联合类型
let s = ref<number | string>('文字') // 既可以保存文字也可以保存数字
// 数字、boolean、数组等同理
let s = ref<number[] | Array<string> | boolean>(true)
TS在数组中的使用
// 数字数组
let numArr = ref<number[]>([1,2,3])
let numArr2 = ref<Array<number>>([1,2,3])
// 文字数组
let strArr = ref<string[]>(['1','2','3'])
let strArr2 = ref<Array<string>>(['1','2','3'])
// 元组
let arr : [string,number,boolean] = ['文字', 1 , true]
当系统不确定该类型是什么,但你知道该类型是什么的时候
// 类型推断
/*当系统不确定该类型是什么,但你知道该类型是什么的时候*/
// 案例:通过id来获取对应项
let data = {
id:1,
name : '东方不败'
}
let arr = [
{id:1,text:'艺术概论'},
{id:2,text:'疾风劲草'},
]
arr.find(el=>el.id == data.id as number)
// 或
arr.find(el=>el.id == <number>data.id)
vue3的ref和reactive在TS中的应用
// ref
let num = ref<number>(100) // 数字类型
let num2 = ref<number[]>([1,2,3]) // 数字类型的数组
// ...依此类推
// reactive
let str = ref<string>('疾风劲草') // 字符串类型
let str2 = ref<string[]>(['疾风劲草','一臂之力']) // 字符串类型的数组
// ...依此类推
接口
?: 表明该数据是可选的
// 通过定义接口来实现对大量数据的类型定义
interface IArr {
name : string;
age : number;
gender : boolean;
address ?: '武汉' // ?: 表明该数据是可选的
}
// 内部的键名需要跟接口对应上,顺序没有要求
let arr = reactive<IArr>({
name : '疾风劲草',
gender : true,
age : 100
})
实际开发中,数据多且杂,处理方法
// 模拟数组嵌套对象
// 接口
interface IArr {
name : string;
age : number;
gender : boolean;
info : IInfo; // 接口2使用
}
// 接口2
interface IInfo {
id : number
goodsName : string;
price : number;
status : boolean;
}
let arr = reactive<IArr>({
name : '疾风劲草',
gender : true,
age : 100,
info : {
id : 1,
goodsName : '书',
price : 50,
status : true,
}
})
// 如果该用户有多个info信息,并且是一个数组,那么接口可以写成以下形式:
interface IArr {
name : string;
age : number;
gender : boolean;
info : IInfo[]; // 接口2使用
}
let arr = reactive<IArr>({
name : '疾风劲草',
gender : true,
age : 100,
info : [
{
id : 1,
goodsName : '书',
price : 50,
status : true,
},
{
id : 2,
goodsName : '笔',
price : 2,
status : true,
}
]
})
如果变量内有多个变量,且内部的变量是一个数组或者对象
// 可以使用解构的方法
// 接口
interface IArr {
name : string;
age : number;
gender : boolean;
info : IInfo; // 接口2使用
}
// 接口2
interface IInfo {
id : number;
goodsName : string;
price : number;
status : boolean;
}
let user = reactive<{ arr : IArr }>{
arr : {
name : '疾风劲草',
gender : true,
age : 100,
info : {
id : 1,
goodsName : '书',
price : 50,
status : true,
}
}
}
// *******************************************************
// 你也可以写成下面这种形式
// 该形式是接口嵌套,通过接口内部的arr来规范数据类型
interface IUser {
arr : IArr
}
// 接口
interface IArr {
name : string;
age : number;
gender : boolean;
info : IInfo; // 接口2使用
}
// 接口2
interface IInfo {
id : number;
goodsName : string;
price : number;
status : boolean;
}
let user = reactive<IUser>{
arr : {
name : '疾风劲草',
gender : true,
age : 100,
info : {
id : 1,
goodsName : '书',
price : 50,
status : true,
}
}
}
将接口和数据全都抽离出来的场景应用
js文件-抽离的数据
接口的ts文件
// 这里举个简单的例子,不同的场景其实都差不多
// js文件抽离
interface IUser {
name : string;
age : number;
gender : boolean;
info : IInfo; // 接口2使用
}
// 接口2
interface IInfo {
id : number
goodsName : string;
price : number;
status : boolean;
}
export type { IUser }
数据的js文件
import { reactive } from "vue";
let userInfo = reactive({
name : '疾风劲草',
gender : true,
age : 100,
info : {
id : 1,
goodsName : '书',
price : 50,
status : true
}
})
export { userInfo }
对应的页面使用
// 在需要使用的文件上使用
import { IUser } from './config'
import { userInfo } from './data'
let user = reactive<{value : IUser}>({value : userInfo})
TS在实际开发中的使用的更多相关文章
- Ionic2 + Angular4 + JSSDK开发中的若干问题汇总
前景 目前微信公众号程序开发已经相当火热,客户要求自己的系统有一个公众号,已经是一个很常见的需要. 使用公众号可以很方便的便于项目干系人查看信息和进行互动,还可以很方便录入一些电脑端不便于录入的数据, ...
- 在基于TypeScript的LayaAir HTML5游戏开发中使用AMD
在基于TypeScript的LayaAir HTML5游戏开发中使用AMD AMD AMD是"Asynchronous Module Definition"的缩写,意思就是&quo ...
- 借助AMD来解决HTML5游戏开发中的痛点
借助AMD来解决HTML5游戏开发中的痛点 游戏开发的痛点 现在,基于国内流行引擎(LayaAir和Egret)和TypeScript的HTML5游戏开发有诸多痛点: 未采用TypeScript编译器 ...
- angular开发中对请求数据层的封装
代码地址如下:http://www.demodashi.com/demo/11481.html 一.本章节仅仅是对angular4项目开发中数据请求封装到model中 仅仅是在项目angular4项目 ...
- Android开发中的logcat工具使用
http://os.51cto.com/art/200905/126051.htm 用adb直接查看log: adb logcat 清除之前的log: adb logcat -c 加过滤查看lo ...
- C#中??和?分别是什么意思? 在ASP.NET开发中一些单词的标准缩写 C#SESSION丢失问题的解决办法 在C#中INTERFACE与ABSTRACT CLASS的区别 SQL命令语句小技巧 JQUERY判断CHECKBOX是否选中三种方法 JS中!=、==、!==、===的用法和区别 在对象比较中,对象相等和对象一致分别指的是什么?
C#中??和?分别是什么意思? 在C#中??和?分别是什么意思? 1. 可空类型修饰符(?):引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空.例如:string str=null; ...
- 在微信小程序开发中使用Typescript
Typescript的优势咱不需要赘述太多,有兴趣可以参考(https://www.typescriptlang.org/).今天给大家分享一下如何在微信小程序(或者其他同类小程序)开发中使用Type ...
- TS基础应用 & Hook中的TS
说在前面 本文难度偏中下,涉及到的点大多为如何在项目中合理应用ts,小部分会涉及一些原理,受众面较广,有无TS基础均可放心食用. **>>>> 阅完本文,您可能会收获到< ...
- TDD在Unity3D游戏项目开发中的实践
0x00 前言 关于TDD测试驱动开发的文章已经有很多了,但是在游戏开发尤其是使用Unity3D开发游戏时,却听不到特别多关于TDD的声音.那么本文就来简单聊一聊TDD如何在U3D项目中使用以及如何使 ...
- React在开发中的常用结构以及功能详解
一.React什么算法,什么虚拟DOM,什么核心内容网上一大堆,请自行google. 但是能把算法说清楚,虚拟DOM说清楚的聊聊无几.对开发又没卵用,还不如来点干货看看咋用. 二.结构如下: impo ...
随机推荐
- C#使用Task在Winform建立控件上的提示等待窗口,实现局部等待加载,不影响主线程(二)
效果图: 源码:(处理了亿点点细节) 链接:https://pan.baidu.com/s/18S1IgQBOyXgeGvhnU3nrKQ?pwd=jpq9提取码:jpq9 作者:兮去博客出处:htt ...
- linux server设置开机自动连接WIFI
1.前言 之前买了一个工控机,装过几个OS(linux 发行版),但是一直没有细研究过流程,只是停留在能用就不管了,工控机自带无线网卡(和俩个有线网口),所以这篇文章好好介绍如何开机自动连接WIFI( ...
- PGL图学习之基于GNN模型新冠疫苗任务[系列九]
PGL图学习之基于GNN模型新冠疫苗任务[系列九] 项目链接:https://aistudio.baidu.com/aistudio/projectdetail/5123296?contributio ...
- 谁说.NET没有GC调优?只改一行代码就让程序不再占用内存
经常看到有群友调侃"为什么搞Java的总在学习JVM调优?那是因为Java烂!我们.NET就不需要搞这些!"真的是这样吗?今天我就用一个案例来分析一下. 昨天,一位学生问了我一个问 ...
- JavaEE Day04 MySQL多表&事务
今日内容 多表查询 事务 DCL用于控制权限和管理用户,DBA完成:SQL中四类DDL DML DQL DCL 一.多表查询 1.多表查询_概述 1.1 查询语法 select ...
- 【每日一题】【动态规划,递推式与公共子串的区别】2022年1月31日-NC92 最长公共子序列(二)
描述 给定两个字符串str1和str2,输出两个字符串的最长公共子序列.如果最长公共子序列为空,则返回"-1".目前给出的数据,仅仅会存在一个最长的公共子序列 方法1: impor ...
- ClickHouse入门教程
目录 什么是ClickHouse? OLAP场景的关键特征 列式数据库更适合OLAP场景的原因 输入/输出 CPU ClickHouse的特性 真正的列式数据库管理系统 数据压缩 数据的磁盘存储 多核 ...
- 第一百一十四篇: JS数组Array(三)数组常用方法
好家伙,本篇为<JS高级程序设计>第六章"集合引用类型"学习笔记 1.数组的复制和填充 批量复制方法 copyWithin(),以及填充数组方法fill(). 这两 ...
- 学习ASP.NET Core Blazor编程系列十八——文件上传(中)
学习ASP.NET Core Blazor编程系列文章之目录 学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应 ...
- 小样本利器5. 半监督集各家所长:MixMatch,MixText,UDA,FixMatch
在前面的几个章节中,我们介绍了几种基于不同半监督假设的模型优化方案,包括Mean Teacher等一致性正则约束,FGM等对抗训练,min Entropy等最小熵原则,以及Mixup等增强方案.虽然出 ...