2024/2/6学习记录

ts

因为已经学习过了 js ,下面的都是挑了一些 ts 与 js 不同的地方来记录。

安装

npm install -g typescript

安装好之后,可以看看自己的版本

ts基础语法

模块  函数  变量  语法和表达式  注释

编译 ts 文件需要用 tsc xxx.ts ,js 文件是用 node 去编译

ts是一个面向对象的编程语言

ts 的数据类型

  • number  双精度64位浮点数,可以用来表示整数和分数
  • string  字符串
  • boolean 布尔类型
  • 数组类型
  • 元组类型 用来表示 已知元素数量和类型的数组,各元素的类型不必相同,对应位置的类型需要相同

示例:

  • enum  枚举 用于定义数值集合
  • void  用于标识方法返回值,表示该方法没有返回值
  • null   表示对象值缺失
  • never  是其他类型 包括 null 和 undefined 的子类型,代表从不会出现的值
  • Any类型

任意值 Any 类型

是 ts 针对编程时类型不明确的变量使用的一种数据类型,它常用于以下三种情况:

  • 变量的值会动态改变
  • 改写现有代码时,任意值允许在编译时可选择地包含或移除类型检查
  • 定义存储各种数据类型的数组时
  • Null 和 Undefined

ts 变量声明

格式:

需要指定类型,倘若没有指定类型,初始值就是 undefined

变量不要使用 name 否则会与 DOM 中的全局 window 对象下的 name 属性出现重名

需要编译 ts 代码 需要先 用 tsc 编译成 js 文件,再用 node 去编译 js 文件。

类型断言

类型断言可以用来手动指定一个值的类型,即允许变量从一种类型更改位 另外一种类型。

语法:

var str = '1' 
var str2:number = <number> <any> str   //str、str2 是 string 类型
console.log(str2)

类型断言纯粹是一个编译时语法,同时 它也是一种为 编译器提供关于如何分析代码的方法。

类型推断

当类型没有给出时,ts 编译器利用类型推断类型,如果由于缺乏声明而不能推断出类型,那么它的类型将被视作动态的 any 类型

变量作用域

ts 一共有三种

  • 全局作用域
  • 类作用域
  • 局部作用域

函数定义:

function function_name():return_type { // 语句return value; 
}
函数带参数:
function add(x: number, y: number): number {return x + y;
}
console.log(add(1,2))

和 js 还是有些不同的

构造函数

ts 支持使用 js 内置的构造函数来定义函数

语法:

var res = new Function ([arg1[, arg2[, ...argN]],] functionBody)

实例:

var myFunction = new Function("a", "b", "return a * b"); 
var x = myFunction(4, 3); 
console.log(x);

编译后的 js 代码:

var myFunction = new Function("a", "b", "return a * b"); 
var x = myFunction(4, 3); 
console.log(x);

函数重载

  • 参数类型不同
function disp(string):void; 
function disp(number):void;
  • 参数数量不同
function disp(n1:number):void; 
function disp(x:number,y:number):void;
  • 参数类型顺序不同
function disp(n1:number,s1:string):void; 
function disp(s:string,n:number):void;

如果参数类型不同,则参数类型应设置为 any,参数数量不同可以将不同的参数设置为可选

实例:

function disp(s1:string):void; 
function disp(n1:number,s1:string):void; function disp(x:any,y?:any):void { console.log(x); console.log(y); 
} 
disp("abc") 
disp(1,"xyz");

联合类型

可以通过  |  运算符 将变量设置多种类型,赋值时可以根据设置的类型来赋值,只能赋值指定的类型,如果赋值其他类型就会报错。

实例:

var val:string|number 
val = 12 
console.log("数字为 "+ val) 
val = "Runoob" 
console.log("字符串为 " + val)

也可以将联合类型作为函数参数使用

实例:

function disp(name:string|string[]) { if(typeof name == "string") { console.log(name) } else { var i; for(i = 0;i<name.length;i++) { console.log(name[i])} } 
} 
disp("Runoob") 
console.log("输出数组....") 
disp(["Runoob","Google","Taobao","Facebook"])

ts 接口

接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法。

interface interface_name { 
}

实例:

interface IPerson { firstName:string, lastName:string, sayHi: ()=>string 
} var customer:IPerson = { firstName:"Tom",lastName:"Hanks", sayHi: ():string =>{return "Hi there"} 
} console.log("Customer 对象 ") 
console.log(customer.firstName) 
console.log(customer.lastName) 
console.log(customer.sayHi())  var employee:IPerson = { firstName:"Jim",lastName:"Blakes", sayHi: ():string =>{return "Hello!!!"} 
} console.log("Employee  对象 ") 
console.log(employee.firstName) 
console.log(employee.lastName)

联合类型和接口的实例:

interface RunOptions { program:string; commandline:string[]|string|(()=>string); 
} // commandline 是字符串
var options:RunOptions = {program:"test1",commandline:"Hello"}; 
console.log(options.commandline)  // commandline 是字符串数组
options = {program:"test1",commandline:["Hello","World"]}; 
console.log(options.commandline[0]); 
console.log(options.commandline[1]);  // commandline 是一个函数表达式
options = {program:"test1",commandline:()=>{return "**Hello World**";}}; var fn:any = options.commandline; 
console.log(fn());

接口和数组

接口中,我们可以将 数组的索引值和元素设置为不同类型,索引值可以是数组或字符串

接口继承

使用 关键字 extends 

实例:

interface Person { age:number 
} interface Musician extends Person { instrument:string 
} var drummer = <Musician>{}; 
drummer.age = 27 
drummer.instrument = "Drums" 
console.log("年龄:  "+drummer.age)
console.log("喜欢的乐器:  "+drummer.instrument)

ts 类

ts 类定义方式如下:

class class_name { // 类作用域
}

static 关键字

static 关键字用于定义类的数据成员(属性和方法)为静态的,静态成员可以直接通过类名调用。

instanceof 运算符

instanceof 运算符用于判断对象是否是指定的类型,如果是返回 true,否则返回 false。

实例:

class Person{ } 
var obj = new Person() 
var isPerson = obj instanceof Person; 
console.log("obj 对象是 Person 类实例化来的吗? " + isPerson);

访问控制修饰符

TypeScript 中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。TypeScript 支持 3 种不同的访问权限。

  • public

公有,可以在任何地方被访问

  • protected

受保护,可以被其自身以及其子类访问

  • private

私有,只能被其定义所在的类访问。

类和接口

类可以实现接口,使用 关键字 implements 

实例:

interface ILoan { interest:number 
} class AgriLoan implements ILoan { interest:number rebate:number constructor(interest:number,rebate:number) { this.interest = interest this.rebate = rebate } 
} var obj = new AgriLoan(10,1) 
console.log("利润为 : "+obj.interest+",抽成为 : "+obj.rebate )

ts 类型模板

在对象中添加方法不能这样写:

对象.方法=function(){  //TODO  }

在  ts  中这样写会出现编译错误,是因为 ts 中的对象必须是特定类型的实例

ts 泛型

泛型(Generics)是一种编程语言特性,允许在定义函数、类、接口等时使用占位符来表示类型,而不是具体的类型。

泛型是一种在编写可重用、灵活且类型安全的代码时非常有用的功能。

使用泛型的主要目的是为了处理不特定类型的数据,使得代码可以适用于多种数据类型而不失去类型检查。

优势:

  • 代码重用
  • 类型安全
  • 抽象性

泛型函数实例:

function identity<T>(arg: T): T {return arg;
}// 使用泛型函数
let result = identity<string>("Hello");
console.log(result); // 输出: Hellolet numberResult = identity<number>(42);
console.log(numberResult); // 输出: 42
泛型接口

可以使用泛型来定义接口,使接口的成员能够使用任意类型

实例:

// 基本语法
interface Pair<T, U> {first: T;second: U;
}// 使用泛型接口
let pair: Pair<string, number> = { first: "hello", second: 42 };
console.log(pair); // 输出: { first: 'hello', second: 42 }

ts 命名空间

命名空间是为了解决重名问题  关键字:namespace 

命名空间定义了标识符的可见范围,一个标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其他命名空间中。

实例:

namespace SomeNameSpaceName { export interface ISomeInterfaceName {      }  export class SomeClassName {      }  
}

调用的格式为:

SomeNameSpaceName.SomeClassName;

如果一个命名空间在一个单独的 TypeScript 文件中,则应使用三斜杠 /// 引用它,语法格式如下:

/// <reference path = "SomeFileName.ts" />

ts 模块

模块是在其自身的作用域里执行,并不是在全局作用域,这意味着定义在模块里面的变量、函数和类等在模块外部是不可见的,除非明确地使用 export 导出它们。类似地,我们必须通过 import 导入其他模块导出的变量、函数、类等。

实例:

导出模块

/// <reference path = "IShape.ts" /> 
export interface IShape { draw(); 
}

导入使用:

import shape = require("./IShape"); 
export class Circle implements shape.IShape { public draw() { console.log("Cirlce is drawn (external module)"); } 
}

uni-app

是一个使用 vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到 IOS  Android  H5 以及各种小程序,快应用等多个平台。

开发工具

官方推荐使用 HbuilderX 来开发 uni-app 类型的项目

好处:

  • 模板丰富
  • 完善的智能提示
  • 一键运行

安装 HBuilderX 

HBuilderX-高效极客技巧 (dcloud.io)

安装 Sass

scss/sass编译 - DCloud 插件市场

配置个性化设置

代码:

{"editor.colorscheme": "Default","editor.fontsize": 12,"editor.fontFamily":"consolas","editor.fontFmyCHS":"微软雅黑 Light","editor.insertSpaces": true,"editor.lineHeight":"1.5","editor.minimap.enabled": false,"editor.mouseWheelZoom": true,"editor.onlyHighlightWord":false,"editor.tabsize":2,"editor.wordwrap":true,"explorer.iconTheme":"vs-seti","editor.codeassist.px2rem.enabel":false,"editor.codeassist.px2upx.enabel":false
}

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

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

相关文章

怎么把照片变成漫画?分享4个工具!

在数字时代&#xff0c;我们每天都会接触到无数的图片&#xff0c;其中很多都是静态的、真实的。超全工具推荐&#xff01;然而&#xff0c;有没有想过将你的照片变成漫画&#xff0c;让它们焕发出全新的生命力&#xff1f; 在数字时代&#xff0c;我们的创意和想象力不再局限…

BUUCTF-Real-[ThinkPHP]2-Rce1

任意代码执行漏洞 ThinkPHP 2.x版本中&#xff0c;使用preg_replace的/e模式匹配路由&#xff1a; $res preg_replace((\w).$depr.([^.$depr.\/])e, $var[\\\1\]"\\2";, implode($depr,$paths)); 导致用户的输入参数被插入双引号中执行&#xff0c;造成任意代码执行…

基于YOLOv7算法的高精度实时垃圾满溢检测系统(PyTorch+Pyside6+YOLOv7)

摘要&#xff1a;基于YOLOv7算法的高精度实时垃圾满溢检测系统可用于日常生活中检测与定位垃圾&#xff08;garbage&#xff09;、垃圾桶&#xff08;garbage_bin&#xff09;和垃圾满溢&#xff08;overflow&#xff09;&#xff0c;此系统可完成对输入图片、视频、文件夹以及…

【Web】小白也能看懂的HGAME week1个人wp(全)

目录 ezHTTP Bypass it Select Courses 2048*16 jhat ezHTTP exp 如下&#xff1a; GET / HTTP/1.1 Host: 47.100.137.175:31717 Pragma: no-cache Cache-Control: no-cache Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Vidar; VidarOS x86_64) AppleW…

1896_Linux中free命令小结

1896_Linux中free命令小结 全部学习汇总&#xff1a; little_bits_of_linux: 一星半点的Linux经验 (gitee.com) 查看Linux中存储的使用情况&#xff0c;我经常使用htop&#xff0c;毕竟这个命令提供的信息是十分直观的。我现在常用的一个小主机其实是我的树莓派3B&#xff0c;虽…

第5节、S曲线加减速转动【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】&#xff0c;查看本系列全部文章 摘要&#xff1a;本节介绍步进电机S曲线相关内容&#xff0c;总共分四个小节讨论步进电机S曲线相关内容 5-1、S曲线加减速简介   根据上节内容&#xff0c;步进电机每一段的速度可以任意设置&#xff0c;但是每一段的…

Python学习路线 - Python高阶技巧 - SQL入门和实战

Python学习路线 - Python高阶技巧 - SQL入门和实战 SQL章节前言无处不在的SQL 数据库介绍无处不在的数据库数据库如何存储数据数据库如何存储数据数据库管理系统(数据库软件)数据库和SQL的关系 Mysql的安装Mysql的介绍Mysql的版本MySQL安装配置环境变量 Mysql的入门使用在命令提…

Linux实验记录:使用Postfix与Dovecot部署邮件系统

前言&#xff1a; 本文是一篇关于Linux系统初学者的实验记录。 参考书籍&#xff1a;《Linux就该这么学》 实验环境&#xff1a; VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 备注&#xff1a; Web服务和FTP文件传输服务虽能实现文…

Django前后端分离之后端实践2

小实践&#xff1a;实现用户登录、注销及ORM管理功能、事务开启小实践 models.py class Books(models.Model):id models.CharField(primary_keyTrue,max_length20,verbose_name"图书ID")name models.CharField(max_length20,verbose_name图书名称)status models…

Linux系统安装mysql数据库并利用自己电脑远程连接

在新装的linux系统中&#xff0c;我们得先开启网络服务才能下载包啊什么的&#xff0c;所以在这之前&#xff0c;我们默认已经开启网络服务。 首先我们需要先下载一个wget命令工具用于从网上下载软件安装包。 首先我们需要先下载一个wget命令工具用于从网上下载软件安装包。下…

mhz_c1f

信息收集 探测到存活主机的IP地址为 192.168.101.32 # nmap -sT --min-rate 10000 -p- 192.168.101.32 -oN port.nmap Starting Nmap 7.94 ( https://nmap.org ) at 2024-02-03 13:41 CST Nmap scan report for 192.168.101.32 Host is up (0.0020s latency). Not shown: 6553…

EasyExcel分页上传数据

EasyExcel分页上传数据 一、实例 controller上传入口 PostMapping("/upload")ResponseBodyLog(title "导入工单", businessType BusinessType.IMPORT)public AjaxResult uploadFile(HttpServletRequest request, MultipartFile files) throws Exceptio…