TypeScript学习:初学
安装等配置指令
安装TypeScript
npm i typescript -g
检查版本
tsc -v npx tsc -v
运行ts文件及js文件
npx tsc 文件名.ts node 文件名.js
安装ts-node脚手架
npm i ts-node -g
检查脚手架版本
npx ts-node -v
初始化ts状态
npx tsc -- init
使用脚手架运行ts文件
npx ts-node 文件名.ts
语法
类型注解
let 变量名:类型名 = 值
let age = 18->let age:number = 18
只能赋值相同类型
age = '张三' 报错:类型错误
其他基本数据类型
let name:name = '张三'
let isfalse:boolean = false
let un:undefined = undefined
数组写法
let arr:number[] = [1,2,3]
let arr:(string | number)[] = [1,2,3,'4']
let arr:Array<number | string> = [1,2,3,'4']
类型别名
type CustomPerson = Array<number | string | boolean>
let arr:CostomPerson = [1,'2',true]
函数类型
function add(a:number,b:number):number{return a+b;}add(1,2)
return '1' 报错:因为要求返回的数据是number类型
add('1',2) 报错:因为要求传入的数据是number类型
键勾函数
const add = (a:number,b:number):number =>{return a+b}
可通过类型别名来同时指定
type CustomAdd = (a:number,b:number)=>number;const add:CustomAdd = (number1,number2)=>{return number1+number2}
void类型
void函数在不需要返回值的时候使用
function sayHi(str:string):void{consolr.log(str)}
可选参数
参数前加"?"表示可选参数
我不知道传入的参数,就把要求传入的参数改为可以传可以不传
必选参数不可以放在可选参数的后面
function createPerson(name:string,age?:number):void{console.log(`名字是${name},年龄为${age}`)}createPerson('张三')
对象类型
let person :{name:stringage:numbersayHi(str:string):void}={name : '张三',age : 18,sayHi(str){console.log(`${str}`)}}person.sayHi('hello')
类型别名适用
type CostomPerson = {name:string,age:number,sayHi(str:string):void}let person:CostomPerson = {name : '张三',age : 18,sayHi(str){console.log(`${str}`)}}person.sayHi('hello')
键勾函数适用
type CostomPerson = {name:string,age:number,sayHi:(str:string)=>void}let person:CostomPerson = {name : '张三',age : 18,sayHi(str){console.log(`${str}`)}}person.sayHi('hello')
可选参数适用
type CostomPerson = {name:string,age:number,hobby?:Array<string>,sayHi(str:string):void}let person:CostomPerson = {name : '张三',age : 18,sayHi(str){console.log(`${str}`)}}person.sayHi('hello')
接口
interface关键字来声明接口
interface CustomPerson {name:stringage:number}let person:CustomPerson = {name : '张三',age : 18}
继承
// 继承 继承另一个类型的所有属性interface CustomPerson1 extends CustomPerson{songs : string}let star:CustomPerson1 = {name : 'aaa',age : 19,songs : '凤凰传奇'}
元组
let position : [number,string] = [1,'1']// 类型推论,根据值反推出类型let age = 18// age = '111'
字面量类型
当类型别名被固定定义时,输入别的值就会报错
{let str = 'hello'const str1 = 'hello'// 贪吃蛇游戏type fangxiang = 'down' | 'up' | 'left' | 'right'function move (driection:fangxiang){console.log(driection)}move('down')// move('aaa')}
泛型
传入什么数据类型 返回什么数据类型
注册泛型函数,在变量名后加<type>,type为类型名
function fn<type> (value:type):type{return value}
调用
声明什么类型,就要用到什么类型
let res = fn<number>(10)
let res = fn<string>('a')
一般能推断的函数类型,简化即可
let res = fn(2)
其他属性调用无效
泛型函数的类型变量 Type 可以代表多个类型,这导致无法访问任何属性
console.log(value.length) 报错:因为不认识length属性
添加约束
添加一个接口,使length属性可以被继承到定义的函数中
interface havelength {length : number}function fn1<type extends havelength> (value:type):type{console.log(value.length)return value}
在调用时,只用有length属性的,在调用时才不会报错
像数字无length属性的,就会报错
let res4 = fn1(2) 报错:因为数字无length属性
let res5 = fn1('abc')
let res6 = fn1([1,2,3,4,5])
多个类型变量
在传入一个对象与其对象之中的子属性时,一般情况下不能正常使用
这需要我们添加一个约束,让key的值始终在obj里面
function getValue<Type,Key extends keyof Type>(obj:Type,key:Key){return obj[key]}getValue({name:'zs',age:18},'name')
在未限制对象之前,如果引用的第一个参数不符合条件,反而会在第二个参数报错,那么我们就要对第一个参数也进行约束
// 继承js中object属性,使第一个参数满足objectfunction getValue1<Type extends object,Key extends keyof Type>(obj:Type,key:Key){return obj[key]}// 这样在引入时就会报第一个参数的错误// getValue1('aaa','b')
泛型接口
但我们在定义了一个固定类型的接口是,泛用性太差,因此我们就需要使用泛型接口在进行泛用
未运用泛型
// 定义了一个接口interface MyArray100 {length : numberpush(value:number):numberpop():numberreverse():number[]}const arr100:MyArray100 = {length:10,push(n:number){return 11},pop(){return 10},reverse(){return [1,2,3]}}arr100.push(10)
运用泛型
// 定义一个存所有值的泛型接口interface MyArray<Type> {length : number// 返回新的数组长度,所以不用改返回的number类型push(value:Type):numberpop():Typereverse():Type[]}// 存数字// 声明传入的类型const arr:MyArray<number> = {length:10,push(n:number){return 11},pop(){return 10},reverse(){return [1,2,3]}}arr.push(10)// 存字符串// 存布尔值
泛型工具类型
type Person = {name : string,age : numberhobby : string[]}
可选
type p = Partial<Person>
只读
type p = Readonly<Person>
单个属性构造
type pickPerson = Pick<Person,'name' | 'age'>
索引签名类型
type Obj = {[key : string] :number }let test : Obj = {x : 111,y : 222}type Person = {[k : string] : string | number}let zs : Person = {name : 'zs',address : 'aaa',email : 'aaa',age : 18}
相关文章:
TypeScript学习:初学
安装等配置指令 安装TypeScript npm i typescript -g 检查版本 tsc -v npx tsc -v 运行ts文件及js文件 npx tsc 文件名.ts node 文件名.js 安装ts-node脚手架 npm i ts-node -g 检查脚手架版本 npx ts-node -v 初始化ts状态 npx tsc -- init 使用脚手架运行ts文件…...
基于Martin的全国基础底图实现
概述 前面有文章基于Martin实现MapboxGL自定义底图分享了Martin的使用,本文使用网络收集的数据实现了全国基础数据的收集和基础底图。 实现后效果 实现 1. 数据准备 实例中包含如下数据: 边界线和九段线数据省边界面数据省会城市点数据市边界面数据…...
网络安全:防范NetBIOS漏洞的攻击
稍微懂点电脑知识的朋友都知道,NetBIOS 是计算机局域网领域流行的一种传输方式,但你是否还知道,对于连接互联网的机器来讲,NetBIOS是一大隐患。 漏洞描述 NetBIOS(Network Basic Input Output System,网络基本输入输…...
一周学会Flask3 Python Web开发-客户端状态信息Cookie以及加密
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili HTTP是无状态(stateless)协议。也就是说,在一次请求响应结束后,服务器不会留下任何关于对…...
机器学习面试八股文——决战金三银四
大家好,这里是好评笔记,公主 号:Goodnote,专栏文章私信限时Free。本笔记的任务是解读机器学习实践/面试过程中可能会用到的知识点,内容通俗易懂,入门、实习和校招轻松搞定。 公主号合集地址 点击进入优惠地…...
Visual studio 2022 将打开文件的方式由单击改为双击
1. 打开vs2022,选择Tools -> Options打开Options设置页面 2. 在左侧依次展开Environment, 选择Tabs and Windows 3. 在右侧面板往下拖拽滚动条,找到Preview Tab section, unchecked "Preview selected files in Solution Explorer (Altclick t…...
【Akashic Records】THE EGG
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: Akashic Records 文章目录 💯观后感一、宇宙的孤寂与个人成长:二、选择与责任:三、灵性与世界的连接:四、选择如何改变命运:结语: 💯…...
Tio-Boot 集成 Spring Boot 实现即时通讯功能全解析
Tio-Boot 集成 Spring Boot 实现即时通讯功能全解析(详细版) 一、Tio-Boot 简介 Tio-Boot 是基于 Tio 框架的 Spring Boot Starter 扩展,提供高性能、低延迟的网络通信能力,支持 TCP/UDP 协议及 WebSocket 协议,适用…...
从零开始用react + tailwindcs + express + mongodb实现一个聊天程序(一)
项目包含5个模块 1.首页 (聊天主页) 2.注册 3.登录 4.个人资料 5.设置主题 一、配置开发环境 建立项目文件夹 mkdir chat-project cd chat-project mkdir server && mkdir webcd server npm init cd web npm create vitelatest 创建前端项目时我们选择javascrip…...
ant design 疑惑记录 Dropdown.Button
onMenuClick是点击展开的 子项的点击事件 Actions的点击事件是什么? 解答: 也是个按钮Button,也有自己的onClick事件 const onMenuClick (e) > {console.log(click, e); }; const otherClick (e) > {console.log(其他操作主按钮…...
Perplexity AI:通过OpenAI与DeepSeek彻底革新搜索和商业策略
在不断发展的AI领域,Perplexity AI已经成为一个独特的力量,正在重塑我们搜索信息的方式。 通过结合前沿的AI工具,Perplexity提供了更智能、更像人类的搜索体验。那么,这个平台与竞争对手有何不同呢? 让我们一起探索Perplexity的商业策略、它如何通过变现服务以及如何利用…...
什么是Firehose?它的作用是什么?
目录 1. Firehose 的作用 2. Firehose 文件(prog_firehose.mbn) 如何获取 Firehose 文件? 3. Firehose 模式(EDL Mode) 如何进入 EDL 模式? 4. Firehose 命令(低级操作) 5. F…...
rkipc main.c 中 rk_param_init函数分析
rk_param_init函数 这个函数是用来读取配置文件进行参数配置 这个函数在 luckfox-pico/project/app/rk_smart_door/smart_door/common/uvc/param/param.c 中 这个函数在main函数中被调用 //通过-c 配置文件路径 把配置文件传进来 case c:rkipc_ini_path_ optarg;//调用&am…...
SAP on Microsoft Azure Architecture and Administration (Ravi Kashyap)
SAP on Microsoft Azure Architecture and Administration (Ravi Kashyap)...
Missing required prop: “maxlength“
背景: 封装一个使用功能相同使用频率较高的input公共组件作为子组件,大多数长度要求为200,且实时显示统计子数,部分input有输入提示。 代码实现如下: <template><el-input v-model"inputValue" t…...
在windows下安装windows+Ubuntu16.04双系统(下)
这篇文章的内容主要来源于这篇文章,为正式安装windowsUbuntu16.04双系统部分。在正式安装前,若还没有进行前期准备工作(1.分区2.制作启动u盘),见《在windows下安装windowsUbuntu16.04双系统(上)》 二、正式安装Ubuntu …...
数据库驱动免费下载(Oracle、Mysql、达梦、Postgresql)
数据库驱动找起来好麻烦,我整理到了一起,需要的朋友免费下载:驱动下载 目前收录了Oracle、Mysql、达梦、Postgresql的数据库驱动的多个版本,后续可能会分享更多。...
业务流程相关的权威认证和培训有哪些
业务流程的认证和培训种类繁多,旨在帮助专业人士掌握业务流程管理 (BPM) 的知识和技能,从而提升个人职业发展和组织运营效率。下面分别介绍: 一、 业务流程认证和培训的种类 业务流程的认证和培训可以大致分为以下几类,涵盖了不…...
java(spring boot)实现向deepseek/GPT等模型的api发送请求/多轮对话(附源码)
我们再启动应用并获取api密钥后就可以对它发送请求了,但是官方文档对于如何进行多轮对话以及怎么自定义参数并没有说的很清楚,给的模板也没有java的,因此我们需要自己实现。 import org.json.JSONArray; import org.json.JSONObject;import j…...
vivado修改下载器下载速率
Error Launching Program X Error while launching program: fpga configuration failed. DONE PIN is not HIGH 原因是下载器速度太快了。先从任务管理器中关闭hw_server.exe试一下,要是不行就按下面三种方法解决。 第一种方法可以不用修改下载速度,直接先从vivado中将bit流…...
巧妙实现右键菜单功能,提升用户操作体验
在动态交互式图库中,右键菜单是一项能够显著提升用户操作便捷性的功能。它的设计既要响应用户点击位置,又需确保菜单功能与数据操作紧密结合,比如删除图片操作。以下将通过一段实际代码实现,展示从思路到实现的详细过程。 实现右键…...
【Altium Designer】BGA扇出
目录 一、前期规则设置 1.调整Clearance规则 2.定义线宽与过孔参数 3.配置Fanout规则 二、自动扇出操作 1.选择目标器件 2.设置扇出参数 3.执行扇出 三、手动优化与验证 1.检查未成功扇出的引脚 2.调整过孔布局 3.验证平面完整性 四、高级技巧 1.分区域扇出 2.差分对优先…...
无前端经验如何快速搭建游戏站:使用 windsurf 从零到上线的详细指南
页面初稿设计 寻找参考网站:浏览互联网,寻找一个或多个你认为设计出色的网站,将你感兴趣的页面部分进行截图保存,这些截图将成为你设计游戏站页面初稿的重要参考。利用 v0.dev 进行页面设计:打开 v0.dev 网站…...
mysql之事务深度解析与实战应用:保障数据一致性的基石
文章目录 MySQL 事务深度解析与实战应用:保障数据一致性的基石一、事务核心概念与原理1.1 事务的本质与意义1.2 事务的 ACID 特性1.2.1 原子性 (Atomicity)1.2.2 一致性 (Consistency)1.2.3 隔离性 (Isolation)1.2.4 持久性 (Durability) 1.3 事务隔离级别与并发问题…...
CASS11快捷键设置
快捷键增加如下: tr----trim bo---(-boundary) ro---rotate ed----explode of---offset qs---qselect dp---ptype re---regen rec---rectang br---break dis---distuser do---draworder...
Python进行简单医学影像分析的示例
以下是一个使用Python进行简单医学影像分析的示例,这里我们以常见的DICOM格式医学影像为例,使用pydicom库读取DICOM文件,使用matplotlib进行影像显示,使用scikit - image进行简单的影像处理。 需求复现讲解 1. 安装必要的库 在…...
anaconda安装报错
一 anaconda报错 Cannot open 本地 Failed to start [powershell.exe, -ExecutionPolicy, RemoteSigned, -NoExit, -Command, & D:\anaconda3\condabin\conda.bat shell.powershell hook | Out-String | Invoke-Expression ; try { conda activate D:/anaconda3/envs/1-man…...
git从本地其他设备上fetch分支
在 Git 中,如果你想从本地其他设备上获取分支,可以通过以下几种方式实现。不过,需要注意的是,Git 本身是分布式版本控制系统,通常我们是从远程仓库(如 GitHub、GitLab 等)拉取分支,而…...
HTTP 常见状态码技术解析(应用层)
引言 HTTP 状态码是服务器对客户端请求的标准化响应标识,属于应用层协议的核心机制。其采用三位数字编码,首位数字定义状态类别,后两位细化具体场景。 状态码不仅是服务端行为的声明,更是客户端处理响应的关键依据。本文将从协议规…...
OpenBMC:BmcWeb定义service
1.定义service //src\webserver_run.cppint run() {...std::shared_ptr<sdbusplus::asio::connection> systemBus std::make_shared<sdbusplus::asio::connection>(io);crow::connections::systemBus systemBus.get();auto server sdbusplus::asio::object_serv…...
