ts基础内容

  1. javascript脚本语言
  2. 简称ts为javascript进阶脚本语法

TypeScript是微软开发的一个开源的编程语言,通过在JavaScript的基础上添加静态类型定义构建而成。TypeScript通过TypeScript编译器或Babel转译为JavaScript代码,可运行在任何浏览器,任何操作系统。

 
  1. TypeScript中文网 · TypeScript——JavaScript的超集

官网

 
  1. https://www.tslang.cn/index.html

ts和js的区别

TypeScript 是 JavaScript 的超集,扩展了 JavaScript 的语法,因此现有的 JavaScript 代码可与 TypeScript 一起工作无需任何修改,TypeScript 通过类型注解提供编译时的静态类型检查。

语言特性

TypeScript 是一种给 JavaScript 添加特性的语言扩展。增加的功能包括:

 
类型批注和编译时类型检查
类型推断
类型擦除
接口
枚举
Mixin
泛型编程
名字空间
元组
Await
以下功能是从 ECMA 2015 反向移植而来:

类
模块
lambda 函数的箭头语法
可选参数以及默认参数

类型

 
类型分析:强类型 和 弱类型
变量在声明之后 是否可以任意转化数据类型
js 弱类型脚本语言 动态弱类型检测
ts 弱类型脚本语言 静态弱类型检测

文档

 
  1. https://typescript.bootcss.com/

项目之外使用ts

 
  1. npm install -g typescript

使用ts编译器来编译

 
  1. tsc 文件名称

文件创建为ts后缀

 
  1. index.ts

ts文件不能直接在浏览器使用,需要编译之后浏览器访问

 
ts/ts 区别

ts代码
let sname:string = "";
sname = 'a';


js
let sname = "";
sname = 1;

//编译之后的
var sname = "";
sname = "a";

ts中语法

 
类型
//ts 声明变量 关键词 名称:类型=初试值?
//字符串类型
let sname: string = "a";
let ssname: string;

//bool
let isM: boolean = true;

//number
let age: number = 0;

//数组
let arr: string[] = [];
let arr1: number[] = [];
let arr2: boolean[] = [];
let arr3: object[] = [];

//泛型
let arr4: Array<number> = [];

//元组
let a: [string, number] = ["a", 1];
console.log(a);

//枚举
enum week {
"mon",
"tus" = 10,
"wed",
}

console.log(week);
console.log(week[0]);

//任意值
let b: any[] = [1, "a", true];
let c: any = "a";

//void 空值 无返回值类型 函数使用
function Person(): void {}
function Person1(): boolean {
return true;
}

//undefined null
let u: undefined = undefined;
let n: null = null;

类型断言

 
在代码中如果存在一个变量可能有值或者为null
data.id-----data 可能有值或者为null
使用类型断言处理

通过类型断言这种方式可以告诉编译器,“相信我,我知道自己在干什么”。 类型断言好比其它语言里的类型转换

类型断言 as

 
//类型断言
let someValue: any = "this is a string";

let strLength: number = (someValue as string).length;
let strLength: number = (<string>someValue).length;

具体使用vite构建react ts项目:

 
ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
<React.StrictMode>
<App />
</React.StrictMode>
);

函数

函数类型注解

 
ts在函数的形参上添加了类型,并且函数需要带返回值类型

function Person(name:string):void{

}

ts函数完整写法

给函数添加函数表达式

 
(str: string) => number 为函数类型
这种写法更像变量赋值
let Lens: (str: string) => number = function (str: string): number {
return str.length;
};

函数的可选参数和默认值

 
//?为可选
function add(a: number, b?: number): number {
if (b) {
return a + b;
}
return a;
}

add(1);
// function add(a: number, b: number = 0): number {
// return a + b;
// }

// add(1);


function Save(a: string, ...b: string[]) {
console.log(b);
}
Save("a", "b", "c");

重载

JavaScript本身是个动态语言。 JavaScript里函数根据传入不同的参数而返回不同类型的数据是很常见的。

什么较重载?

同名函数,参数个数不同,类型不同 返回值不同 叫函数的重载。

 
//重载
//重载个数算函数表达式
//函数的主题必须兼容上面的表达式
function Sort(): string[];
function Sort(a: string): string[];
function Sort(a: string, b: string): string[];
function Sort(a: number, b: number): number[];
//函数主体
function Sort(a?: any, b?: any): any[] {
if (typeof a == "number" && typeof b == "number") {
return [b, a];
}
if (typeof a == "string" && typeof b == "string") {
return [b, a];
}
return [];
}

Sort(1, 2);

//编译之后
//函数主体
function Sort(a, b) {
if (typeof a == "number" && typeof b == "number") {
return [b, a];
}
if (typeof a == "string" && typeof b == "string") {
return [b, a];
}
return [];
}
Sort(1, 2);

ts中自定义类型

使用type关键词

 
//自定义类型
type PropType = {
name: string;
age?: number;
};

//以上定义的格式 直接定义属性为必填 写?属性为选填

let stu: PropType = { name: "" };

已项目为例:

 
const App = () => {
return (
<>
<div>app</div>
</>
);
};

export default App;
//普通的函数组件

转化为ts格式组件
import React from "react";
//使用type定义props
type PropTypes = {
list?: object[];
};

const Menu: React.FC<PropTypes> = (props) => {
return (
<>
<div>Menu</div>
</>
);
};
//props默认值
Menu.defaultProps = {
list: [],
};

export default Menu;

接口

interface

TypeScript的核心原则之一是对值所具有的结构进行类型检查。 它有时被称做“鸭式辨型法”或“结构性子类型化”。 在TypeScript里,接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约。

ts中 type和interface都可以结构化。

 
interface 关键词
//接口的作用 定义结构 没有实现体
interface propsTypes {
name: string;
age: number;
fun: () => void;
}

//对象实现接口
let stus: propsTypes = {
name: "小花",
age: 18,
fun:function ():void{

}
};

//接口属性选填
let app:()=>number=function():number{

}
直接在属性上写?
interface propsTypes {
name: string;
age: number;
fun?: () => void;//选填
}

//对象实现接口
let stus: propsTypes = {
name: "小花",
age: 18,
};

接口只读

 
关键词 readonly
interface propsTypes {
name: string;
age: number;
fun?: () => void;
readonly goback: boolean;
}

//对象实现接口
let stus: propsTypes = {
name: "小花",
age: 18,
goback: true,
};

//接口定义的属性 不能赋值
// stus.goback = false;

接口中设置任意属性

 
接口背实现之后如果没有设置任意,不能随意添加属性。
//接口的作用 定义结构 没有实现体
interface propsTypes {
name: string;
age: number;
fun?: () => void;
readonly goback: boolean;
//任意
[propName: string]: any; //值 any
}

//对象实现接口
let stus: propsTypes = {
name: "小花",
age: 18,
goback: true,
isma: false,
isFUN: 10,
};

//接口定义的属性 不能赋值
// stus.goback = false;

接口索引化

 
interface aType {
//index 为固定
[index: number]: string;
}
let arrss: aType = ["a"];

修改函数组件props使用interface接口

 
import React from "react";
//使用type定义props
// type PropTypes = {
// list?: object[];
// };

type listType = {
id: number;
name: string;
};

interface PropTypes {
list?: object[];
}

const Menu: React.FC<PropTypes> = (props) => {
return (
<>
<div>Menu</div>
</>
);
};
//props默认值
Menu.defaultProps = {
list: [],
};

export default Menu;

ts操作函数组件

 
1.文件后缀为tsx
2.写函数组件
3.修改为ts
import React, { MouseEvent, ReactElement, useState } from "react";
//接口
//限定结构
type menuType = {
name?: string;
};
interface propTypes {
menu: menuType[];
children?: ReactElement;
}
const Menu: React.FC<propTypes> = ({ menu, children }) => {
let [isShow, setShow] = useState<boolean>(true);

let add = (e: MouseEvent) => {
console.log(1111);
};
if (isShow) {
return (
<>
<div>
<button onClick={add}>按钮</button>
{menu.map((item, index) => {
return <p key={index}>{item.name}</p>;
})}
</div>
</>
);
}
return null;
};

export default Menu;

泛型

软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性。 组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵活的功能。

解释:定义的时候不需要知道类型,在使用时告知类型。

 
举例:
function identity(arg: number): number {
return arg;
}

function identity(arg: any): any {
return arg;
}

//以上两种函数 同名 参数类别不一致 返回值不一致。
//会定义多个导致函数的可复用性变差。

使用泛型提高函数可复用性

使用泛型变量来定义泛型结构

function psy<T>(a: T): T {
return a;
}

psy<number>(1);
psy<string>("a");
psy<boolean>(true);


//使用泛型变量
function psy<T>(a: T[]): T[] {
a.length
return a;
}

psy<number>([1, 2, 3]);



function sort<T, U>(a: T, b: U): any[] {
let arr: any[] = [];
arr[0] = a;
arr[1] = b;
return arr;
}

sort<number, number>(1, 2);
sort<string, string>("a", "b");
sort<boolean, boolean>(true, false);

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python 字符串格式化高级用法

字符串格式化: 是在编程过程中&#xff0c;允许编码人员通过特殊的占位符&#xff0c;将相关对应的信息整合或提取的规则字符串。 python字符串格式化字符串的格式化常用的三种方式&#xff0c;分别是使用 %格式化&#xff0c;format方法格式化&#xff0c;fstring格式化。 传…

元数据管理概述

参考公众号文章&#xff1a;数据治理&#xff1a;元数据及元数据管理策略、方法和技术

走进小程序【一】什么是小程序?

文章目录&#x1f31f;前言&#x1f31f;发展史&#x1f31f;什么是[微信小程序](https://developers.weixin.qq.com/miniprogram/dev/framework/)&#xff1f;&#x1f31f;微信小程序能做什么&#xff1f;&#x1f31f;小程序发展前景和优势&#x1f31f;写在最后&#x1f31…

应用层 —— HTTPS协议

目录 1、HTTPS介绍 HTTP 与 HTTPS "加密" 是什么 常见的加密方式 对称加密 非对称加密 数据摘要 && 数据指纹 数字签名 2、HTTPS的工作过程探究 方案1 —— 只使用对称加密&#xff08;明文传输不可取&#xff09; 方案2 —— 只使用非对称加密&#xff08…

【探花交友】day02—完善个人信息

目录 1、完善用户信息 1.1、阿里云OSS 1.2、百度人脸识别 1.3、保存用户信息 1.4、上传用户头像 2、用户信息管理 2.1、查询用户资料 2.2、更新用户资料 3、统一token处理 3.1、代码存在的问题 3.2、解决方案 3.3、代码实现 4、统一异常处理 4.1、解决方案 4.2、…

「从零入门推荐系统」14:推荐系统冷启动

作者 | gongyouliu编辑 | gongyouliu作者在第2章《推荐系统基础介绍》中讲述推荐系统面临的挑战时提到冷启动是推荐系统的重要挑战之一。冷启动问题是推荐系统工程实践中非常重要的一个问题&#xff0c;只有解决好冷启动问题&#xff0c;推荐系统的用户体验才会更好。有很多读者…

首届“兴智杯”产业赛收官,文心大模型助推产业创新

由工业和信息化部、科学技术部、深圳市人民政府共同主办&#xff0c;中国信通院等单位承办的首届“兴智杯”全国人工智能创新应用大赛圆满收官。本次大赛受到国家部委、政府机构、科技企业、高校师生等社会各界密切关注。为了进一步激发创新活力&#xff0c;促进人工智能核心技…

ChatGPT 本地部署及搭建

这篇简要说下清华开源项目 ChatGLM 本地部署的详细教程。清华开源项目 ChatGLM-6B 已发布开源版本&#xff0c;这一项目可以直接部署在本地计算机上做测试&#xff0c;无需联网即可体验与 AI 聊天的乐趣。 项目地址&#xff1a;GitHub - THUDM/ChatGLM-6B: ChatGLM-6B&#xf…

创建网络数据集

目的&#xff1a;主要是用来做路径规划。 第一步&#xff1a;加载用作构建网络数据集的道路网数据到arcmap。 第二步&#xff1a;做打断处理。【如果线数据未做过打断处理&#xff0c;需要做这一步。】 有两种方式【1、编辑器里面的高级编辑器的打断相交线功能&#xff1b;2、…

带你玩转Python爬虫(胆小者勿进)千万别做坏事·······

这节课很危险&#xff0c;哈哈哈哈&#xff0c;逗你们玩的 目录 写在前面 1 了解robots.txt 1.1 基础理解 1.2 使用robots.txt 2 Cookie 2.1 两种cookie处理方式 3 常用爬虫方法 3.1 bs4 3.1.1 基础介绍 3.1.2 bs4使用 3.1.2 使用例子 3.2 xpath 3.2.1 xpath基础介…

AD20 PCB后期处理

•DRC检查•位号的调整•装配图制造输出•Gerber&#xff08;光绘&#xff09;文件输出•BOM输出•原理图PDF输出•文档规范存档1.电气性能检查 完成PCB的布局布线工作之后&#xff0c;接下来需要进行DRC检查&#xff0c;DRC检查主要是检查整板PCB布局布线与用户设置的规则约束…

最小的k个数(堆排序,快排)

原文&#xff1a; 最小的k个数 - 最小的k个数 - 力扣&#xff08;LeetCode&#xff09; class Solution { public: vector<int> getLeastNumbers(vector<int>& arr, int k) { vector<int> vec(k, 0); if (k 0) { // 排除 0 的情况 …

WT588D软件操作教程二

1、音频输出模式设置 设置音频的输出方式为 DAC(外接功放模式)和 PWM(直接驱动扬声器模式)。 点击“操作”→“选项”,在选项界面里设置音频输出模式。 2、BUSY 设置 设置 BUSY 端( I/O 口 P17)在播放音频时输出电平状态为高或低。 点击“操作”→“选项”,在“忙信号输…

ArcEngine 添加标题

样例 做法【这个很简单&#xff0c;看一下就能懂】 代码 private void 添加标题ToolStripMenuItem_Click(object sender, EventArgs e){{ IGraphicsContainer graphicsContainer mainPageLayoutControl1.PageLayout as IGraphicsContainer;IEnvelope envelope ne…

javaweb实现登录和注册(前端转数据到后端,servlet到mysql验证的案例)

一、 myeclipse的tomcat的使用和驱动的放置 软件版本&#xff1a; 编译软件myeclipse2014 数据库mysql2014 驱动mysql-connector-java-5.1.47 1、myeclipse的tomcat的使用 新建立一个java web 项目&#xff0c;在src下面新建里一个servlet类&#xff08;名叫register&#x…

电子学会2023年3月青少年软件编程(图形化)等级考试试卷(四级)真题,含答案解析

青少年软件编程(图形化)等级考试试卷(四级) 分数:100 题数:24 一、单选题(共10题,共30分) 1. 编写一段程序,从26个英文字母中,随机选出10个加入列表a。空白处应填入的代码是?( )

数字工厂项目实施注意事项有哪些

借助数字工厂管理系统&#xff0c;电子制造企业可以规范和优化整个企业内部业务流程&#xff0c;标准化企业业务数据&#xff0c;实现企业管理信息化;可以更高效的管理及分配企业资源&#xff0c;更高效的运营。基于供应链管理的数字工厂系统&#xff0c;在实施过程中需要注意些…

Windows 使用很久以后,C盘空间不足,怎么办

C:\User\某用户\AppData\Local\Tmp 把这个文件夹下的文件删除掉

写在28岁,回看3年前的自己,庆幸当时入了软件测试这行

为什么会学习软件测试&#xff1f; 已经28岁了&#xff0c;算一下快过去3年了&#xff0c;刚毕业那会工作了一年&#xff0c;因为自己当时很迷茫&#xff08;觉得自己挺废的&#xff09;&#xff0c;所以就没去工作就一直在家&#xff0c;家里固定每个月给点生活费&#xff0c…