都2023年了你还不学ts (一)

news2025/1/14 18:10:36

TypeScript基础语法入门

TypeScript究竟是什么?

他主要就是想把JavaScript里面不完美的一些语法来进行一个提升

就像官网中所说的

TypeScript is JavaScript with syntax for types.

例如我们看下面的这段代码

if ("" == 0) {
    console.log('hello')
}

在JavaScript里面,会打印出来hello,因为在比较的时候,会进行类型转换。

下面在看一个更加诡异的

function compare(x){
    if (1<x<3){
        console.log('hello')
    }
}
compare(41)

image-20230912145043418

这个很简单。首先是比较1是否小于41 之后会转换为true

true<3这个会转换为1<3 所以就会进行打印了

typescript就是在JavaScript的基础上。引入了类型的概念。做了一些优化

我们把之前写的代码放入到ts中

可以发现有明显的报错

image-20230912145520217

之后我们再看一个例子,首先看他的JavaScript版本

function getDistance(point1, point2) {
    return [point2.x - point1.x, point2.y - point1.y]
}

getDistance({
    x: 1,
    y: 1
}, {
    x: 2,
    y: 2
});

下面来看typescript

type Point={x:number,y : number}
function getDistance(point1:Point, point2:Point) {
    return [point2.x - point1.x, point2.y - point1.y]
}
getDistance({
    x: 1,
    y: 1
}, {
    x: 2,
    y: 2
});

假设我们再JavaScript里面,传了一个字符串。一个错误的参数,JavaScript里面是无法校验的。

但是在ts里面

image-20230912150326304

就会直接报错了

所以我们来进行一个总结,对于typescript他的特点:

  • 更容易帮助我们发现程序里的问题
  • 语法提示更加完善,有了类型之后,写代码非常爽
  • 语义更强,代码可读性更高

从静态类型校验的角度理解

在官网中。写的这门语言的一个特点

Static Type Checker 静态类型校验能力

一门语言,在代码执行之前。就能做错误预警,那么我们就说这个语言具有静态校验能力

TS 约等于 JS+ Static Type Checker

基础类型快速入门

首先看几个基础的类型的定义

//基础类型 String number boolean
const teachName:string="zhang san"
const teachAge:number=28
const isMale:boolean=true

下面我们来看数组类型如何定义

//数组类型
const numberArr:number[]=[1,2,3,4,5,6]
const stringArr:string[]=['a','b','c']
const booleanArr:Array<boolean> = [true,false] //泛型

之后我们再来看看对象类型

//对象类型
const user:{
    name : string,
    age : number
}={
    name:'zhangsan',
    age:18
}
const userOne:{
    name : string,
    age? : number//添加问号代表着age可选
}={
    name:'dell',
    
}

以及联合类型

//联合类型
function union(id:string|number){
    //id既可以是string也可以是number
    if (typeof id === 'string'){ //类型收窄 Narrowing
        console.log(id.toUpperCase())
    }else {
        console.log(id)
    }
}

除了这些之外,还有一些代码上的快捷。

例如类型别名

//类型别名
type User = {
    name:string,age : number
}
const userTwo:User={name : 'dell',age:18}
const userThree:User={name : 'dell',age:18}

这是为了解决类型复用所产生的一个用法

下面我们来看any类型 如果不写any类型的话,默认也会推断成any类型的,但是最好也是手动的去写上。这样有利于代码的可读性

function showMessage(message:any){
    //any代表什么类型都可以
    console.log(message)
}

之后我们来看函数类型

//函数类型
function abc(message:string):number{
    return 123
}

这个就是约定了返回值。

还可以用箭头函数这样写

const def:(age:number)=>number=(age : number)=>{
    //接受一个number类型的age参数,返回值必须是number
   return age
}

下面我们来讲接口类型 interface

//接口类型 Interface
interface Stu{
    age:number;
    sex:string;
}
const stu:Stu = {age : 18,sex : '男'}

有点像刚才的对象类型其实很类似。包括和类型别名也很相似。

但是接口有一个特点就是可以继承

interface OldStudent extends Stu{
    name : string;
}

下面来看交叉类型

//交叉类型
type Employee=User&{salary:number}
const employee:Employee = {age : 18,name : 'zhangsan',salary:1}

之后来看断言

//断言 Assersion
const dom:undefined=document.querySelector('#root') as undefined
const testString:string=123 as any as string;
const dom1:undefined=<undefined> document.querySelector(' #root')

之后来看字面量类型

//字面量类型
const str:'asd'='asd'
const truthy:true=true
function getPosition(position:'left'|'right'):string {
    return position
}
getPosition('left')

这个类型很有意思。我们来看一个练习题。

function request(url:string,method : 'GET'|'POST'):string{
    return 'sending request'
}
const params:{url : string,method : string}={
    url:'immoc.com',
    method : 'GET'

}
request(params.url,params.method)

假如是这样写的话,虽然说params.method是GET,但是因为在定义的时候method是string类型的。所以就会报错。

image-20230913091018618

如果修改method的类型定义,就不会报错了

function request(url:string,method : 'GET'|'POST'):string{
    return 'sending request'
}
const params:{url : string,method : 'GET'|'POST'}={
    url:'immoc.com',
    method : 'GET'

}
request(params.url,params.method)

第二种我们可以用断言语法

request(params.url,params.method as 'GET')

下面我们来看null和undefined

//null undefined
const testobject:null=null
const test2object:null=undefined

默认情况下null和undefined是可以转换的。

之后来看void

//void
function getNumber():void{
    
}

就是这个函数是一个无返回值

类型注解和类型判断

//TS开发准则:只要是变量,或者对象属性,都应该有一个明确的类型


//类型注解 人工的告诉TS 变量或者对象的明确属性类型
const userName:string='123'


//类型推断
const userAge=18

//如果类型推断能够自动推断出来类型,就没有必要手写类型注解
const userNick='deel'


function getTotal(paramOne:number,paramTwo:number){
    return paramOne+paramTwo
}

ction getNumber():void{

}


就是这个函数是一个无返回值

### 类型注解和类型判断

```ts
//TS开发准则:只要是变量,或者对象属性,都应该有一个明确的类型


//类型注解 人工的告诉TS 变量或者对象的明确属性类型
const userName:string='123'


//类型推断
const userAge=18

//如果类型推断能够自动推断出来类型,就没有必要手写类型注解
const userNick='deel'


function getTotal(paramOne:number,paramTwo:number){
    return paramOne+paramTwo
}

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

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

相关文章

VS新功能:智能添加函数标记

今天&#xff0c;我们官宣 Visual Studio 预览版的两项新功能&#xff1a; 1) 标记类成员函数为 const。 2) 标记全局函数为 static。 标记类成员函数为 const 如果一个类成员函数不会修改对象的状态&#xff0c;则 Visual Studio 会给出建议&#xff0c;将这个函数标记为 c…

Python统计pdf中英文单词的个数

之前的文章提供了批量识别pdf中英文的方法,详见【python爬虫】批量识别pdf中的英文,自动翻译成中文上。以及自动pdf英文转中文文档,详见【python爬虫】批量识别pdf中的英文,自动翻译成中文下。    本文实现python统计pdf中英文字符的个数。 文章目录 一、要统计字符的pdf…

JDK14特性——GC的改进和优化

文章目录 G1的NUMA内存分配优化NUMA介绍目标 弃用SerialCMS,ParNewSerial Old理由 删除CMSCMS弊端其他垃圾收集器 ZGC on macOS and Windows G1的NUMA内存分配优化 NUMA介绍 NUMA就是非统一内存访问架构&#xff08;英语&#xff1a;non-uniform memory access&#xff0c;简…

【Flask】会话保持-API授权-注册登录

http - 无状态-无法记录是否已经登陆过 #会话保持 – session cookie session – 保存一些在服务端 cookie – 保存一些数据在客户端 session在单独服务器D上保存&#xff0c;前面数个服务器A,B,C上去取就好了&#xff0c;业务解耦。—》》现在都是基于token的验证。 以上是基…

SpringMVC自定义注解和使用

一.引言 1.简介&#xff1a; 在Spring MVC中&#xff0c;我们可以使用自定义注解来扩展和定制化我们的应用程序。自定义注解是一种通过Java的注解机制定义的特殊注解&#xff0c;可以应用于控制器类、方法或者方法参数上&#xff0c;以实现不同的功能和行为。&#xff08;注解…

[uni-app] iOS/Android端 禁止单个页面侧滑返回的处理记录

需要禁止部分页面侧滑返回 iOS端 popGesture 但是实测后, 其实设置popGesture:none 是无效的 真正可以用的是这个 disableSwipeBack android端 别的方案没有逐一尝试, 这边可以在需要禁止的页面的 onBackPress onBackPress() {// 禁止侧滑(但注意也会禁止导航返回,导航返…

如何在外网访问公司项目?快解析实现内网ip让公网连接

随着互联网技术的不断发展&#xff0c;越来越多的企业和个人选择使用服务器进行网站或应用程序的部署。公司内部项目需要提供外网访问是个常见的网络场景&#xff0c;需要怎么操作设置也是网络或项目人员需要关注的。 企业使用服务器搭建公司业务系统一般会使用云服务器或者使…

最新AI创作系统ChatGPT源码/支持国内AI模型/支持GPT4.0/支持AI绘画

一、AI创作系统 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT系统&#xff1f;小编这里写一个详细图文教程吧&am…

WebGPU学习(10)---如何利用 WebGPU 实现高性能

虽然是WebGPU&#xff0c;但是速度很慢&#xff01;&#xff1f; 我们将解释如何充分利用 WebGPU 性能。这次我们以绘制大量物体为例&#xff0c;根据“使用纹理”中的代码进行一些更改并绘制 900 个立方体。 要均匀分布立方体&#xff0c;可以按如下方式更新 worldMatrix&am…

微信小程序 解决 当套在scroll-view中后 wx.pageScrollTo 函数失效问题解决

pageScrollTo 只是 页面的API 他对 scroll-view 的滚动是无法控制的 但是 scroll-view 也提供了一个scroll-into-view属性 我们编写一个小案例 wxml 参考代码如下 <view><scroll-view scroll-y"{{ true }}" style"height: 100vh;" scroll-into-v…

笑笑云航服悦《乡村振兴战略下传统村落文化旅游设计》许少辉博士新著

笑笑云航服悦《乡村振兴战略下传统村落文化旅游设计》许少辉博士新著

Android高级开发-APK极致优化

九道工序 1. SVG(Scalable Vector Graphics)可缩放矢量图 使用矢量图代替位图可以减小 APK 的尺寸&#xff0c;因为可以针对不同屏幕密度调整同一文件的大小&#xff0c;而不会降低图像质量。 矢量图首次加载时可能消耗更多的 CPU 资源。之后&#xff0c;二者的内存使用率和…

Spring 篇

1、什么是 Spring&#xff1f; Spring是一个轻量级的IOC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架&#xff0c;目的是用于简化企业应用程序的开发&#xff0c;它使得开发者只需要关心业务需求。常见的配置方式有三种&#xff1a;基于XML的配置、基于注解的配置…

06JVM_类加载器

一、类加载器 以JDK8为例&#xff1a; ①启动类加载器 ②扩展类加载器 ③应用程序类加载器 ④自定义类加载器 ①类加载器具有层级关系&#xff0c;当加载一个类的时候&#xff0c;要看所有的上级有没有加载此类。【双亲委派模式】 ②类加载器负责在运行时将Java类动态加载…

4.开放-封闭原则

这个原则其实是有两个特征&#xff0c;一个是说‘对于扩展是开放的(Open for extension)&#xff0c;另一个是说‘对于更改是封闭的(Closed for modification)[ASD]。

走近Callable

1.特点 可以有返回值可以抛出异常方法不同&#xff0c; run() / call(); Callable 接口类似于Runnable &#xff0c;因为它们都是为其实例可能有另一个线程执行的类设计的&#xff0c; 然而&#xff0c;Runnable不返回结果&#xff0c;也不能抛出被检查的异常。 2.代码测试…

互联网数字化管理升级,制造企业一站式智能管理,可定制-亿发

在互联网时代&#xff0c;传统机械制造企业面临着未有的挑战和机遇。信息化管理水平成为企业竞争力的关键因素。然而&#xff0c;许多制造企业在信息化管理中常常陷入以下三大问题&#xff1a; 1、盲目随潮流&#xff0c;缺乏总体规划 互联网时代&#xff0c;科技发展日新月异…

python基础复习-基本数据类型

目录 数字进制转换小数精度科学计算库 字符串转义符正向/反向索引正向/反向切片成员运算字符编码字符串处理 布尔类型指示条件作为掩码 类型转换 数字 进制转换 a10 bbin(a) coct(a) dhex(a) print(a,b,c,d) print(type(a)) print(type(b)) print(type(c)) print(type(d))10 …

Spring Cloud超越微服务:服务网格的崭露头角

文章目录 1. 微服务的挑战2. 什么是服务网格&#xff1f;3. Spring Cloud和服务网格服务发现负载均衡安全性服务网格扩展 4. 服务网格的优势4.1. 解耦通信逻辑4.2. 提高可观察性4.3. 灰度发布和流量控制4.4. 安全性 5. 未来展望6. 结论 &#x1f389;欢迎来到架构设计专栏~Spri…

【办公自动化】用Python在Excel中查找并替换数据(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…