typescript的入门到吐槽:看了typescript,发现前端真的卷,

typescript

TypeScript 是一种由微软开发的自由和开源的编程语言。它是 JavaScript 的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程。

TypeScript 与 JavaScript 的区别

其实就是对JavaScript的封装,把一个弱类型语言封装成一个强类型语言,后端语言话,支持模块和接口
在这里插入图片描述

安装typescript

npm i typescript -g

写一个ts文件并编译

初始化tsc的配置文件tsc --init,目录下就会出现 tsconfig.json文件,之后我们再执行编译命令

let hello:string="aaaaa"tsc ./src/index.ts

也可以不编译而用在线工具查看编译结果

typescript的数据类型

数据类型

可能由于ts是对js的封装,要兼容js的各种数据类型,所以ts的数据类型也是相当复杂,比如any unknow void never等,对一个类型又做了很多的拆分。

类型例子描述
number1, -33, 2.5任意数字
string‘hi’, “hi”, hi任意字符串
booleantrue、false布尔值true或false
字面量其本身限制变量的值就是该字面量的值
any*任意类型
unknown*类型安全的any
void空值(undefined)没有值(或undefined)
never没有值不能是任何值
object{name:‘孙悟空’}任意的JS对象
array[1,2,3]任意JS数组
tuple[4,5]元素,TS新增类型,固定长度数组
enumenum{A, B}枚举,TS中新增类型

变量的声明方式

我们知道,在golang 里面我们声明变量,有两种方式

	//var var num int64num = 22//:=num1 := 22fmt.Println(num, num1)

在typescript里面 他把这两种方法糅合了一下,个人感觉这种声明方式有点啰嗦

let a:number=1
let b:bool 

类型检测

如果我们给一个number赋值字符串,编辑器就会报错,编译也不会通过
在这里插入图片描述
在这里插入图片描述

相关类型声明实例

// 布尔类型
let isDone: boolean = false;
// 数字类型
let count: number = 10;
//string类型
let userName: string = '张三';
//数组类型
let list: number[] = [1, 2, 3];
let list2: Array<number> = [1, 2, 3];
//枚举类型 默认从0开始 也可以指定默认值
enum Color {Red,Green,Blue
}
//调用方式
console.log(Color.Red);
//go是这样用的 非常类似
// const (
// name1  = iota
// name2
// name3
// )//字面量
let color: 'red' | 'blue' | 'green' = 'red';
if (color=="red"){console.log("red")
}//Any类型 其实就是泛类型
let anyData:any=4
anyData="jimi"
anyData=true//unknown
let safeData:unknown=4
safeData="jimi"
safeData=true//void
let noData:void=undefined
//never
let error:(()=>never)=()=>{throw new Error("error")
}
//元组
let x:[string,number]=["jimi",10]

关于any unknown never void

  • any
    any简单来说它是一个泛类型,可以是任何类型,既然ts是为了约束类型,为什么还要出来一个any呢?个人感觉可能是为了兼容其他的package。但是any有一个问题,它既然是任何类型,就意味着不论怎样,它都不会报错,我们举例看一下
let car:any={name:"BMW",model:"X5",year:2019,color:"black"
}
car="123"
car.Hello()
  • unknow
    那ts可就没有任何意义了,怎么办?即需要any类型,又不想让大家乱用导致报错,咋办?ts又推出一个类型,叫unknown,unknow允许接收任何类型,但是不允许你操作这个数据,我们简单看一下,编译也不会通过
    在这里插入图片描述
    如果你想要操作它,可以,你必须让编译器知道这是你主动去操作的,而不是误操作,比如说,你断言了类型,说实话,很鸡肋的功能。
let bike: unknown = "124";
bike = { name: "Honda", model: "X5", year: 2019, color: "black" };if (typeof bike === "object" && bike !== null) {// @ts-ignore  用于告诉 TypeScript 编译器忽略对接下来代码的类型检查console.log((bike as object).name);//转换为anyconsole.log((bike as any).name);
}
  • never
    如果你知道if elseif,那么就太好理解了,never就是你if elseif 都不可能命中的情况,简单举个例子
function getInfo(id:string|number){if (typeof id === "string"){}else if (typeof id === "number"){//超出所有预期,}else{throw new Error("id类型错误")}
}
  • void
    我们之前写html的时候为了不让a标签跳转,我们会怎么写?一般都用<a href="javascript:void(0)">阻止默认跳转的行为,void 就代表的是啥也不做,没有任何返回值
function doNothing():void{console.log(111);
}

类型断言

//类型断言1 as语法
let unknownData:unknown="this is a string";
console.log((unknownData as string).length);
//类型断言2 尖括号
let unknownNewData:unknown="this is a string";
console.log((<string>unknownNewData).length);

React+ts环境搭建

接下来为了方便演示和输出结果,我使用react+ts来构建一个项目npx create-react-app react_ts --template typescript,创建完毕之后,会出现react_ts目录,我们进入目录内,点进package.json文件,点击start 项目即可启动
在这里插入图片描述

  • 也可以使用单元测试,即react_ts/src/App.test.tsx文件中通过test来实现单测
  • 建议升级一下node
import React from 'react';test('renders learn react link', () => {console.log(1+2222);
});

类型判断

in

我们知道,一个变量可以是类型a 或者是类型b,当我们判断到底是a还是b的时候,我们可以用in来判断,比如下面代码

test('type in', () => {interface a {name: string;}interface b {age: number;}let c:a|b;c={age:80}if ("age" in c ){console.log("this is type b");}
});

typeof

typeof其实也可以说是一种类型映射,通过映射可以解析变量属于哪种类型

test('typeof', () => {let a={name:"zhangsan"}console.log(typeof a);//object
});
  • instanceof 这个对于后端人员最熟悉不过了,判断变量是否属于某个类,前端语言后端工程化。
class Animal {name:string;constructor(name:string){this.name=name;}sayHi(){return `My name is ${this.name}`;}
}test('class', () => {let dog=new Animal("dog");if (dog instanceof Animal){console.log(dog.sayHi());}
});

类型交叉

ts的类型可以 交叉 可以 或,可以说是非常之(s)屌

test('type in', () => {interface a {name: string;}interface b {age: number;}let c:a|b;let d:a&bc={age:80}d={name:"zhangsan",age:80}console.log(c);console.log(d);
});

解构

看名字好像很厉害,其实就是展开的意思,不管是数组还是对象,都可以展开,举个例子

test('open', () => {//对象展开let people={name:"zhangsan",age:18,sayHi(){return "i am sayHi";}}let {name,age,sayHi}=peopleconsole.log(name);console.log(age);console.log(sayHi());//数组展开let arr=[1,2,3,4,5,6]let arr2=[...arr,7,8,9]console.log(arr2);
});
  • 循环
  //循环for(let i of arr){console.log(i);}

接口

其实就是php的抽象类,必须全部实现接口里面的属性和方法,才可以使用

interface IAnimal{name:string;age:number;sayHi(hello:string):string;}test("interface",()=>{let dog:IAnimal={name:"dog",age:18,sayHi(hello){return `${hello}`;}}console.log(dog);})

既然是抽象类,那肯定得有私有属性和公共属性吧,一般默认公共属性,私有属性需要用readonly修饰符,初始化之后不再允许改变

interface IAnimal{name:string;age:number;readonly sex:number;sayHi(hello:string):string;}test("interface",()=>{let dog:IAnimal={name:"dog",age:18,sex:1,sayHi(hello){return `${hello}`;}}dog.age=20;dog.sex=2;//报错 Cannot assign to 'sex' because it is a read-only propertyconsole.log(dog);})

直接参考php的类和相关操作就可以了

class A{private name:string="a"public b:stringstatic Db:string="db"constructor(b_name:string){this.b=b_name}getB(){return this.b}setB(b_name:string){this.b=b_name}
}test("classA",()=>{let a=new A("b")console.log(a.getB());console.log(A.Db);a.setB("bbbbb")console.log(a);
})
  • 静态变量和成员变量的区别
    静态变量在全局只会生成一个,也就是说只有一个内存变量,成员变量是每个对象都会生成一份数据。

类的继承

这个没啥说的,和php一样用extends继承,反正写着写着,就好像写成了php

编译选项

前面我们提了,我们可以使用tsc ./src/index.ts来指定编译的文件,但是如果我想实时编译怎么办呢?其实就是让tsc运行在watch模式,在执行命令的时候,加一个w就可以了 tsc ./src/index.ts -w

tsconfig.json

如果我们有额外的配置,可以写在这个json文件中

  • include 表示编译哪些目录下的ts文件
"include":["src/**/*", "tests/**/*"]
  • exclude表示不编译哪些目录下文件
  • extends 配置文件可以被继承的,下面这句的意思就是配置继承自base.json文件
"extends": "./configs/base"
  • files 指定编译哪些文件
"files": ["core.ts","sys.ts","types.ts","scanner.ts","parser.ts","utilities.ts","binder.ts","checker.ts","tsc.ts"]
  • 编译选项配置
{"extends": "","compileOnSave": false,"compilerOptions": { //编译选项"allowJS": false, // 允许编译器编译JS,JSX文件"checkJs": false, // 	在 .js文件中报告错误。与allowJs配合使用。"allowSyntheticDefaultImports": false, //允许从没有设置默认导出的模块中默认导入。这并不影响代码的输出,仅为了类型检查。默认值:module === "system" 或设置了 --esModuleInterop 且 module 不为 es2015 / esnext"allowUnreachableCode": false, //不报告执行不到的代码错误。"allowUnusedLabels": false, //不报告未使用的标签错误"alwaysStrict": false, // 在代码中注入'use strict',以严格模式解析并为每个源文件生成 "use strict"语句"charset": "utf8", //输入文件的字符集"declaration": false, // 生成声明文件.d.ts,开启后会自动生成声明文件"declarationDir": "", // 指定生成声明文件存放目录"diagnostics": false, // 显示诊断信息"extendedDiagnostics": false, //显示详细的诊段信息"experimentalDecorators":false,//启用实验性的ES装饰器"disableSizeLimit": false, //禁用JavaScript工程体积大小的限制"emitBOM": false, //在输出文件的开头加入BOM头(UTF-8 Byte Order Mark)。"forceConsistentCasingInFileNames": false, //禁止对同一个文件的不一致的引用"incremental": true, // TS编译器在第一次编译之后会生成一个存储编译信息的文件,第二次编译会在第一次的基础上进行增量编译,可以提高编译的速度"isolatedModules":false,//将每个文件作为单独的模块(与“ts.transpileModule”类似)。"listEmittedFiles": false, //打印出编译后生成文件的名字"listFiles": false, // 编译过程中打印文件名"tsBuildInfoFile": "./buildFile", // 增量编译文件的存储位置"target": "ES5", // 指定ECMAScript目标版本 "ES3"(默认), "ES5", "ES6"/ "ES2015", "ES2016", "ES2017"或 "ESNext""module": "CommonJS", // 设置程序的模块系统, "None", "CommonJS", "AMD", "System", "UMD", "ES6"或 "ES2015", "ESNext", "ES2020",只有 "AMD"和 "System"能和 --outFile一起使用,"ES6"和 "ES2015"可使用在目标输出为 "ES5"或更低的情况下。默认值:target === "ES6" ? "ES6" : "commonjs""moduleResolution": "node", // 模块解析策略,ts默认用node的解析策略,即相对的方式导入"jsx":"Preserve",//在 `.tsx`文件里支持JSX: `"React"`或 `"Preserve"`"jsxFactory":"React.createElement",//指定生成目标为react JSX时,使用的JSX工厂函数,比如 `React.createElement`或 `h`"newLine": "crlf", //当生成文件时指定行结束符: "crlf"(windows)或 "lf"(unix)。"noEmit": false, // 不输出文件,即编译后不会生成任何js文件"noEmitOnError": false, // 发送错误时不输出任何文件"noErrorTruncation": false, //不截短错误消息"noFallthroughCasesInSwitch": false, // 防止switch语句贯穿(即如果没有break语句后面不会执行)"noImplicitAny": false, // 不允许隐式的any类型,在表达式和声明上有隐含的 any类型时报错"noImplicitReturns": false, //每个分支都会有返回值,不是函数的所有返回路径都有返回值时报错"noImplicitThis": false, // 不允许this有隐式的any类型"noImplicitUseStrict": false, //模块输出中不包含 "use strict"指令"noLib": false, //不包含默认的库文件( lib.d.ts)"noResolve": false, //不把 /// <reference``>或模块导入的文件加到编译文件列表。"noEmitHelpers": true, // 不生成helper函数,减小体积,需要额外安装,常配合importHelpers一起使用"noStrictGenericChecks": false, //禁用在函数类型里对泛型签名进行严格检查"noUnusedLocals": false, // 若有未使用的局部变量则抛错"noUnusedParameters": false, // 检若有未使用的函数参数则抛错"lib": [ //TS需要引用的库,即声明文件,es5 默认引用dom、es5、scripthost,如需要使用es的高级版本特性,通常都需要配置,如es8的数组新特性需要引入"ES2019.Array","DOM","ES2015","ScriptHost","ES2019.Array"],"outDir": "./dist", // 指定输出目录"outFile": "./app.js", // 将多个相互依赖的文件生成一个文件,可以用在AMD模块中,即开启时应设置"module": "AMD","preserveSymlinks": false, //不把符号链接解析为其真实路径;将符号链接文件视为真正的文件"preserveWatchOutput": false, //保留watch模式下过时的控制台输出"removeComments": true, // 删除所有注释,除了以 /!*开头的版权信息"rootDir": "./", // 指定输出文件目录(用于输出),用于控制输出目录结构"resolveJsonModule":true,//允许导入扩展名为“.json”的模块"emitDeclarationOnly": true, // 只生成声明文件,而不会生成js文件"sourceMap": true, // 生成目标文件的sourceMap文件"inlineSourceMap": false, // 生成目标文件的inline SourceMap,inline SourceMap会包含在生成的js文件中"inlineSources": false, // 将代码与sourcemaps生成到一个文件中,要求同时设置了 --inlineSourceMap或 --sourceMap属性"declarationMap": true, // 为声明文件生成sourceMap"types": [], // 要包含的类型声明文件名列表"typeRoots": [], // 声明文件目录,默认时node_modules/@types"importHelpers": true, // 通过tslib引入helper函数,文件必须是模块(比如 __extends, __rest等)"downlevelIteration": true, // 降级遍历器实现,如果目标源是es3/5,那么遍历器会有降级的实现"strict": true, // 启用所有严格类型检查选项。启用 --strict相当于启用 --noImplicitAny, --noImplicitThis, --alwaysStrict, --strictNullChecks和 --strictFunctionTypes和--strictPropertyInitialization"skipLibCheck": false, //忽略所有的声明文件( *.d.ts)的类型检查"strictNullChecks": true, // 不允许把null、undefined赋值给其他类型的变量.在严格的 null检查模式下, null和 undefined值不包含在任何类型里,只允许用它们自己和 any来赋值(有个例外, undefined可以赋值到 void)"strictFunctionTypes": true, // 不允许函数参数双向协变"strictPropertyInitialization": true, // 	确保类的非undefined属性已经在构造函数里初始化。若要令此选项生效,需要同时启用--strictNullChecks"suppressExcessPropertyErrors": false, //阻止对对象字面量的额外属性检查"suppressImplicitAnyIndexErrors": false, //阻止 --noImplicitAny对缺少索引签名的索引对象报错"strictBindCallApply": true, // 严格的bind/call/apply检查"useDefineForClassFields": true, //详见 https://jkchao.github.io/typescript-book-chinese/new/typescript-3.7.html#usedefineforclassfields-%E6%A0%87%E8%AE%B0%E4%B8%8E-declare-%E5%B1%9E%E6%80%A7%E4%BF%AE%E9%A5%B0%E7%AC%A6"esModuleInterop": true, // 允许module.exports=xxx 导出,由import from 导入.因为很多老的js库使用了commonjs的导出方式,并且没有导出default属性"allowUmdGlobalAccess": true, // 允许在模块中全局变量的方式访问umd模块"baseUrl": "./", // 解析非相对模块的基地址,默认是当前目录"paths": { // 模块名到基于 baseUrl的路径映射的列表// 如使用jq时不想使用默认版本,而需要手动指定版本,可进行如下配置"jquery": ["node_modules/jquery/dist/jquery.min.js"]},"rootDirs": ["src","out"], // 将多个目录放在一个虚拟目录下,用于运行时,即编译后引入文件的位置可能发生变化,这也设置可以虚拟src和out在同一个目录下,不用再去改变路径也不会报错},"files": [],"include": [],"exclude": [],"references": []
}
  • 常用配置参考
{"compilerOptions": {"allowJs": true, //允许编译器编译JS,JSX文件"target": "ES2015", //指定ECMAScript目标版本"useDefineForClassFields": true,"module": "ESNext", //设置程序的模块系统"moduleResolution": "Node", //模块解析策略。默认使用node的模块解析策略"strict": true, //启用所有严格类型检查选项"jsx": "preserve", //preserve模式,在preserve模式下生成代码中会保留JSX以供后续的转换操作使用"sourceMap": true, //生成目标文件的sourceMap文件"resolveJsonModule": true, //允许导入扩展名为“.json”的模块"esModuleInterop": false, //允许module.exports=xxx 导出,由import from 导入.因为很多老的js库使用了commonjs的导出方式,并且没有导出default属性"lib": [ //TS需要引用的库"ESNext","DOM"],"forceConsistentCasingInFileNames": true, //禁止对同一个文件的不一致的引用"allowSyntheticDefaultImports": true, //允许从没有设置默认导出的模块中默认导入"skipLibCheck": true, //忽略所有的声明文件( *.d.ts)的类型检查"baseUrl": "./", // 解析非相对模块的基地址,默认是当前目录"paths": { //模块名到基于 baseUrl的路径映射的列表"/@/*": ["src/*"],},"types": [ //要包含的类型声明文件名列表"vite/client","element-plus/global",]},"include": [ //包含的文件"src/**/*.ts","src/**/*.d.ts","src/**/*.tsx","src/**/*.js","src/**/*.jsx","src/**/*.vue",]
}

总结

一直都听说前端卷,看了ts之后发现是真的卷,比如数据类型就多出了any unknown never void 不知道实际过程中用处大不大,比如类型之间的|和&,当场就把我看懵逼了,已经有了interface,有了class,还有extends,你来给我讲讲你类型之间的|和&真的是必须的吗?今天刚看完typescript,听说你们又开始next.js了,前端大佬们,你们真的没事干了吗?😭😭

相关参考

react+ts部署
ts详解

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

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

相关文章

刨析YOLOv8的改进模块

1、YOLOv5回顾 这里粗略回顾一下,这里直接提供YOLOv5的整理的结构图吧:Backbone:CSPDarkNet结构,主要结构思想的体现在C3模块,这里也是梯度分流的主要思想所在的地方;PAN-FPN:双流的FPN,必须香,也必须快,但是量化还是有些需要图优化才可以达到最优的性能,比如cat前后…

淘宝扭蛋机小程序,开启你的惊喜探索之旅!

亲爱的淘宝用户们&#xff0c;我们非常高兴地宣布&#xff0c;全新的淘宝扭蛋机小程序即将上线&#xff01;这是一款集合了趣味、惊喜与购物乐趣于一体的创新应用&#xff0c;让你在淘宝的海洋里&#xff0c;找到那份独特的快乐。 一、淘宝扭蛋机小程序是什么&#xff1f; 淘…

Qt与MySQL连接

QT连接Mysql数据库&#xff08;详细成功版&#xff09;-CSD N博客 我的MySQL是64位的&#xff0c;所以我的Qt的套件也需要是64位的 遇到的问题&#xff1a; &#xff08;available drivers中已经有QMYSQL QMYSQL3&#xff0c;还是not loaded&#xff09; QSqlDatabase: QMYS…

RAG 检索的底座:Milvus Cloud向量数据库

在业界实践中,RAG 检索通常与向量数据库密切结合,也催生了基于 ChatGPT + Vector Database + Prompt 的 RAG 解决方案,简称为 CVP 技术栈。这一解决方案依赖于向量数据库高效检索相关信息以增强大型语言模型(LLMs),通过将 LLMs 生成的查询转换为向量,使得 RAG 系统能在向…

团结引擎+OpenHarmony 3 通信

团结引擎和鸿蒙之间通信 因为 ts 并没有像 JAVA 有反射的调用&#xff0c;所以我们必须要像 Web GL 平台一样通过导出的行为告诉引擎到底哪些 ts 的接口可以给 C# 来调用。 1 在 Tuanjie 引擎里 需要一个tsllib文件&#xff0c;用于设置给导出对象 C#使用。就可以直接创建以 …

C++ | Leetcode C++题解之第72题编辑距离

题目&#xff1a; 题解&#xff1a; class Solution { public:int minDistance(string word1, string word2) {vector<vector<int>> dp(word1.size() 1, vector<int>(word2.size() 1, 0));for (int i 0; i < word1.size(); i) dp[i][0] i;for (int j…

大模型的概念与特点

在人工智能的浩瀚星空中&#xff0c;大模型犹如一颗璀璨的明星&#xff0c;引领着技术发展的方向。它们以巨大的参数规模和复杂的计算结构&#xff0c;展现出前所未有的智能潜力。本小节将从大模型的基本概念出发&#xff0c;逐步深入解析其发展历程、特点、分类以及泛化与微调…

【Java基础】字符串的内存情况及应用场景

String 特点 用双引号引起来的一串字符&#xff0c;字符串不变&#xff0c;它们的值在创建后不能被更改String str"hello";存储在堆中的字符串常量池已经定义过的字符串&#xff0c;再次定义时直接使用已有的字符串String类重写了**boolean equals(object obj)**方…

爱丁堡大学出新招,大小语言模型配合节约成本!

在大语言模型的应用中&#xff0c;往往面临着成本和性能权衡的问题。 一方面&#xff0c;大型LLM的参数量极大&#xff08;如70B&#xff09;&#xff0c;每次调用都可能带来更多的成本&#xff0c;而小型LLM&#xff08;如7B&#xff09;的成本则更容易被接受。 另一方面&am…

接收区块链的CCF会议--NDSS 2025 截止7.10 附录用率

会议名称&#xff1a;Network and Distributed System Security Symposium (NDSS) CCF等级&#xff1a;CCF A类学术会议 类别&#xff1a;网络与信息安全 录用率&#xff1a;2024年接收率19.5% Submissions are solicited in, but not limited to, the following areas: Ant…

DOTA-Gly-Asp-Tyr-Met-Gly-Trp-Met-Asp-Phe-NH2,1306310-00-8,是一种重要的多肽化合物

一、试剂信息 名称&#xff1a;DOTA-Gly-Asp-Tyr-Met-Gly-Trp-Met-Asp-Phe-NH2CAS号&#xff1a;1306310-00-8结构式&#xff1a; 二、试剂内容 DOTA-Gly-Asp-Tyr-Met-Gly-Trp-Met-Asp-Phe-NH2是一种重要的多肽化合物&#xff0c;其CAS号为1306310-00-8。该多肽包含一个DO…

ICLR 2024 杰出论文开奖了!录用率31%,两篇国内论文获荣誉提名

朋友们&#xff0c;ICLR 2024开奖了&#xff01;5月7日至11日&#xff0c;今年的大会在奥地利维也纳展览会议中心举行。 ICLR&#xff08;国际表征学习大会&#xff09;是公认的深度学习领域国际顶级会议之一&#xff0c;属于CCF A类&#xff0c;主要专注于深度学习和强化学习等…

hexo 博客插入本地图片时遇到的坑

哈喽大家好&#xff0c;我是咸鱼。 最近一直在折腾博客的事&#xff0c;说是 hexo 极易上手&#xff0c;我觉得只仅限于在安装部署的时候&#xff0c;随着对 hexo 的深入使用&#xff0c;发现遇到的问题还是挺多的。 那今天来讲一下我在把本地图片插入到 hexo 博客文章中遇到…

树莓派4b红外检测

1.红外检测连接图 2.红外检测工作原理 红外传感器的工作原理类似于物体检测传感器。该传感器包括一个红外LED和一个红外光电二极管&#xff0c;因此通过将这两者结合起来&#xff0c;可以形成一个光耦合器。 红外LED是一种发射红外辐射的发射器。该LED看起来与标准LED相似&a…

Games101-动画与模拟(求解常微分方程,刚体与流体)

Single Particle Simulation 规定了任何一个物体任何时刻的速度&#xff0c;知道它的初始位置&#xff0c;求它某个时间后的位置&#xff1f; 如果一个物体是匀速直线运动&#xff0c;用初始位置加上速度和时间的乘积即可 如上图&#xff0c;如果想描述一个粒子在一个速度场&am…

【平台开发】MTK6833——cache操作记录

CPU Cache 用的是一种叫 SRAM&#xff08;Static Random-Access Memory&#xff0c;静态随机存储器&#xff09; 的芯片。 通常分为L1&#xff0c;L2&#xff0c;L3三层缓存。 CPU 并不会直接和每一种存储器设备直接打交道&#xff0c;而是每一种存储器设备只和它相邻的存储器…

Linux---HTTP协议

HTTP HTTP协议&#xff08;Hypertext Transfer Protocol&#xff0c;超文本传输协议&#xff09;是一种应用层协议&#xff0c;主要用于在Web浏览器和Web服务器之间传输数据。 一、认识URL 平时我们俗称的 " 网址 " 其实就是说的 URL http请求样例 看起来是一行一…

ubuntu20文件安装和卸载cuda11.6

搜索cuda 11.6 nvidia&#xff0c;进入官网https://developer.nvidia.com/cuda-11-6-0-download-archive 选择linux --> runfile 用安装包安装 wget https://developer.download.nvidia.com/compute/cuda/11.6.0/local_installers/cuda_11.6.0_510.39.01_linux.run sudo s…

uniapp 小程序图片懒加载组件 ImageLazyLoad

预览图 组件【ImageLazyLoad】代码 <template><viewclass"image-lazy-load":style"{opacity: opacity,borderRadius: borderRadius rpx,background: background,transition: opacity ${time / 1000}s ease-in-out,}":class"image-lazy-loa…

第二代增强-采购订单抬头子屏幕增强

文章目录 第二代增强-采购订单抬头子屏幕增强需求查找增强点创建项目增强子屏幕定义全局变量编写出口函数代码激活增强运行结果查看创建的采购订单底表数据 第二代增强-采购订单抬头子屏幕增强 需求 查找增强点 创建项目 增强子屏幕 定义全局变量 *&---------------------…