当前位置: 首页 > news >正文

TypeScript快速入门———(二)TypeScript常用类型

文章目录

    • 概述
    • 1 类型注解
    • 2 常用基础类型概述
    • 3.原始类型
    • 4 数组类型
    • 5 类型别名
    • 6.函数类型
    • 7 对象类型
    • 8 接口
    • 9 元组
    • 10 类型推论
    • 11 类型断言
    • 12 字面量类型
    • 13 枚举
    • 14 any 类型
    • 15 typeof


概述

TypeScript 是 JS 的超集,TS 提供了 JS 的所有功能,并且额外的增加了:类型系统

  • 所有的 JS 代码都是 TS 代码。
  • JS 有类型(比如,number/string 等),但是 JS不会检查变量的类型是否发生变化。而 TS 会检查

TypeScript 类型系统的主要优势:可以显示标记出代码中的意外行为,从而降低了发生错误的可能性。

  1. 类型注解
  2. 常用基础类型

1 类型注解

示例代码:

let age: number = 18;

说明:代码中的 : number就是类型注解。
作用:为变量添加类型约束。比如,上述代码中,约定变量 age 的类型为 number(数值类型)。
解释:约定了什么类型,就只能给变量赋值该类型的值,否则,就会报错。

在这里插入图片描述

2 常用基础类型概述

可以将 TS 中的常用基础类型细分为两类:1.JS 已有类型, 2.TS 新增类型。

JS 已有类型

  • 原始类型:number/string/boolean/null/undefined/symbol
  • 对象类型:object(包括,数组、对象、函数等对象)

TS 新增类型
联合类型、自定义类型(类型别名)、接口、元组、字面量类型、枚举、void、any 等

3.原始类型

原始类型:number/string/boolean/null/undefined/symbol。
特点:简单。这些类型,完全按照 JS 中类型的名称来书写

//1.原始数据类型:number/string/boolean/null/undefined/symbol
let myAge: number = 26;
let myName: string = 'Tom';
let isMan: boolean = true;
let a: null = null;
let b: undefined = undefined;
let symbol: symbol = Symbol();

4 数组类型

数组类型的两种写法:(推荐使用 number[] 写法)

let numbers: number[] = [1,3,5];
let strings: Array<string> = ['a','b','c'];

需求:数组中既有 number 类型,又有 string 类型,这个数组的类型应该如何写?

//表示数组中既可以有number类型的元素也可以有string的元素
let numberAndStrings: (number | string)[] = [1, 'a', 2, 'b'];

解释:| (竖线)在 TS 中叫做联合类型(由两个或多个其他类型组成的类型,表示可以是这些类型中的任意一种)。
注意:这是 TS 中联合类型的语法,只有一根竖线,不要与 JS 中的或(||)混淆了。

5 类型别名

类型别名(自定义类型):为任意类型起别名。
使用场景:当同一类型(复杂)被多次使用时,可以通过类型别名,简化该类型的使用

type numberAndStringsType = (number | string)[];
let Array1: numberAndStringsType = [5,6,7,'b'];
let Array2: numberAndStringsType = ['c','d',10];

6.函数类型

函数的类型实际上指的是:函数参数返回值的类型
为函数指定类型的两种方式:1 单独指定参数、返回值的类型,2 同时指定参数、返回值的类型。

单独指定参数、返回值的类型:

//函数声明方式:单独指定参数、返回值的类型(num1和num2为函数参数,参数小括号后面的为函数的返回值)
function add(num1: number, num2: number): number{return num1 + num2;
}
//函数表达式方式:单独指定参数、返回值的类型(num1和num2为函数参数,参数小括号后面的为函数的返回值)
const add1 = (num1: number, num2: number): number => {return num1 + num2;
}

同时指定参数、返回值的类型:

//函数表达式方式:同时指定参数、返回值的类型
const add2: (num1: number, num2: number) => number = (num1, num2) => {return num1 + num2;
}

解释:当函数作为表达式时,可以通过类似箭头函数形式的语法来为函数添加类型。
注意:这种形式只适用于函数表达式

如果函数没有返回值,那么,函数返回值类型为:void

//注意:void返回类型为TS新加的,JS是没有的
function speak(says: string): void {console.log('hello', says);
}

可选参数

使用函数实现某个功能时,参数可以传也可以不传。这种情况下,在给函数参数指定类型时,就用到可选参数了。
比如,数组的 slice 方法,可以 slice() 也可以 slice(1) 还可以 slice(1, 3)。

const myWords = (word1: string, word2?: string): string => {return word1 + word2;
}
myWords('Hi');
myWords('Hi', 'Tom!');

可选参数:在可传可不传的参数名称后面添加 ?(问号)。
注意:可选参数只能出现在参数列表的最后,也就是说可选参数后面不能再出现必选参数

7 对象类型

JS 中的对象是由属性和方法构成的,而 TS 中对象的类型就是在描述对象的结构(有什么类型的属性和方法)。
对象类型的写法:

let person: {name: stringage: number// sayHi(): voidsayHi: () => voidsayHello: (word?: string) => void
} = {name: 'Tom',age: 28,sayHi(){console.log('Hi!')},sayHello(){console.log('Hello!')}
}

解释:

  1. 直接使用 {} 来描述对象结构。属性采用属性名: 类型的形式;方法采用方法名(): 返回值类型的形式。
  2. 如果方法有参数,就在方法名后面的小括号中指定参数类型(比如:sayHi(word: string): void)。
  3. 在一行代码中指定对象的多个属性类型时,使用;(分号)来分隔。
  4. 如果一行代码只指定一个属性类型(通过换行来分隔多个属性类型),可以去掉 ;(分号)。
  5. 方法的类型也可以使用箭头函数形式(比如:{ sayHi: () => void })。

可选属性
对象的属性或方法,也可以是可选的,此时就用到可选属性了。
比如,我们在使用 axios({ … }) 时,如果发送 GET 请求,method 属性就可以省略。

/可选属性
const myAxios = (config:{url: string, method?; string}): void => {console.log(config);
}

可选属性的语法与函数可选参数的语法一致,都使用 ?(问号)来表示。

8 接口

当一个对象类型被多次使用时,一般会使用接口(interface)来描述对象的类型,达到复用的目的。

//使用接口指定对象的类型,只能为对象指定类型
interface IPerson{   //interface没有等号name: stringage: numbersayHi: () => void
}
//调用接口初始化对象
let myPerson: IPerson = {name: 'Tony',age: 63,sayHi() {console.log('我是接口调用');},
}

解释:

  1. 使用 interface 关键字来声明接口。
  2. 接口名称(比如,此处的 IPerson),可以是任意合法的变量名称。
  3. 声明接口后,直接使用接口名称作为变量的类型
  4. 因为每一行只有一个属性类型,因此,属性类型后没有 ;(分号)。

interface(接口)和 type(类型别名)的对比:
相同点都可以给对象指定类型
不同点:接口,只能为对象指定类型。类型别名不仅可以为对象指定类型,也可以为任意类型指定别名

//使用类型别名指定对象的类型
type Iperson1 = {  //type有等号name: stringage: numbersayHi: () => void
}
//调用类型别名初始化对象
let myPerson1: Iperson1 = {name: 'Tony1',age: 63,sayHi() {console.log('我是类型别名调用');},
}

接口继承
如果两个接口之间有相同的属性或方法,可以将公共的属性或方法抽离出来,通过继承来实现复用

比如,这两个接口都有 x、y 两个属性,重复写两次,可以,但很繁琐。

interface point2D{x: numbery: number
}
interface point3D{x: numbery: numberz: number
}

更好的方式:

//接口继承
interface point2D{x: numbery: number
}
interface point3D extends point2D{z: number
}
let p3: point3D = {x: 1,y: 2,z: 3
}

解释:

  1. 使用 extends(继承)关键字实现了接口 Point3D 继承 Point2D。
  2. 继承后,Point3D 就有了 Point2D 的所有属性和方法(此时,Point3D 同时有 x、y、z 三个属性)。

9 元组

场景:在地图中,使用经纬度坐标来标记位置信息。
可以使用数组来记录坐标,那么,该数组中只有两个元素,并且这两个元素都是数值类型:

let position: number[] = [113.27, 23.13];

使用 number[] 的缺点:不严谨,因为该类型的数组中可以出现任意多个数字。
更好的方式:元组(Tuple)。元组类型是另一种类型的数组,它确切地知道包含多少个元素,以及特定索引对应的类型

let position1: [number, number] = [113.27, 23.13];
let postiion2: [number, number, string, string] = [113.27, 23.13, 'China', 'GuangZhou'];

10 类型推论

在 TS 中,某些没有明确指出类型的地方,TS 的类型推论机制会帮助提供类型
换句话说:由于类型推论的存在,这些地方,类型注解可以省略不写!
发生类型推论的 2 种常见场景:1 声明变量并初始化时 2 决定函数返回值时。

//(能够省略类型注解的两种情况:1.声明变量并赋值 2.决定函数返回值时)
let amount = 1000;
const caculateAmout = (amount1: number, amount2: number) =>{return amount1 + amount2;
}

在这里插入图片描述
在这里插入图片描述

11 类型断言

有时候你会比 TS 更加明确一个值的类型,此时,可以使用类型断言来指定更具体的类型。
比如,当你需要拿到<a></a>标签中的href属性时,你需要怎么操作呢?

<a href="https://www.baidu.com/" id="link">百度</a>

首先你要找到<a></a>标签所对应的类型对象是什么,再根据类型断言得到这个对象,最后通过对象属性的方法得到herf属性
如果不清楚如何查看某个标签的对象类型可以参考这个blog: 快速查找前端页面元素的对象类型

const myLink = document.getElementById("link") as HTMLAnchorElement;
console.log(myLink.href)

解释:

  1. 使用 as 关键字实现类型断言。
  2. 关键字 as 后面的类型是一个具体的类型(HTMLAnchorElement)。
  3. 通过类型断言,aLink 的类型变得更加具体,这样就可以访问 a 标签特有的属性或方法了。

12 字面量类型

思考以下代码,两个变量的类型分别是什么?

let str1 = 'Hello TS';
const str2 = 'Hello TS';

通过 TS 类型推论机制,可以得到答案:

  1. 变量 str1 的类型为:string
  2. 变量 str2 的类型为:'Hello TS'

解释:

  1. str1 是一个变量(let),它的值可以是任意字符串,所以类型为:string
  2. str2 是一个常量(const),它的值不能变化只能是 ‘Hello TS’,所以,它的类型为:'Hello TS'

注意:此处的 'Hello TS',就是一个字面量类型。也就是说某个特定的字符串也可以作为 TS 中的类型
除字符串外,任意的 JS 字面量(比如,对象、数字等)都可以作为类型使用。

字面量类型配合联合类型一起使用:
使用场景:用来表示一组明确的可选值列表
比如,在贪吃蛇游戏中,游戏的方向的可选值只能是上、下、左、右中的任意一个。

在这里插入图片描述
解释:参数 direction 的值只能是 up/down/left/right 中的任意一个。
优势:相比于 string 类型,使用字面量类型更加精确、严谨

13 枚举

枚举的功能类似于字面量类型+联合类型组合的功能,也可以表示一组明确的可选值
枚举:定义一组命名常量。它描述一个值,该值可以是这些命名常量中的一个。

在这里插入图片描述
解释:

  1. 使用 enum 关键字定义枚举。
  2. 约定枚举名称、枚举中的值以大写字母开头。
  3. 枚举中的多个值之间通过 ,(逗号)分隔。
  4. 定义好枚举后,直接使用枚举名称作为类型注解。

注意:形参 direction 的类型为枚举 Direction,那么,实参的值就应该是枚举 Direction 成员的任意一个。
访问枚举成员:

在这里插入图片描述
解释:类似于 JS 中的对象,直接通过点(.)语法访问枚举的成员。

数字枚举
问题:我们把枚举成员作为了函数的实参,它的值是什么呢?

在这里插入图片描述

解释:通过将鼠标移入 Direction.Up,可以看到枚举成员 Up 的值为 0。
注意:枚举成员是有值的,默认为:从 0 开始自增的数值
我们把,枚举成员的值为数字的枚举,称为:数字枚举。
当然,也可以给枚举中的成员初始化值。

在这里插入图片描述

字符串枚举
枚举成员的值是字符串。

在这里插入图片描述
注意:字符串枚举没有自增长行为,因此,字符串枚举的每个成员必须有初始值

14 any 类型

原则:不推荐使用 any!这会让 TypeScript 变为 “AnyScript”(失去 TS 类型保护的优势)。
因为当值的类型为 any 时,可以对该值进行任意操作,并且不会有代码提示

在这里插入图片描述
解释:以上操作都不会有任何类型错误提示,即使可能存在错误!
尽可能的避免使用 any 类型,除非临时使用 any 来“避免”书写很长、很复杂的类型!
其他隐式具有 any 类型的情况:1 声明变量不提供类型也不提供默认值 2 函数参数不加类型。
注意:因为不推荐使用 any,所以,这两种情况下都应该提供类型!

15 typeof

众所周知,JS 中提供了 typeof 操作符,用来在 JS 中获取数据的类型。

在这里插入图片描述
实际上,TS 也提供了 typeof 操作符:可以在类型上下文中引用变量或属性的类型(类型查询)。
使用场景:根据已有变量的值,获取该值的类型,来简化类型书写。

在这里插入图片描述
解释:

  1. 使用 typeof 操作符来获取变量 p 的类型,结果与第一种(对象字面量形式的类型)相同。
  2. typeof 出现在类型注解的位置(参数名称的冒号后面)所处的环境就在类型上下文(区别于 JS 代码)。
  3. 注意:typeof 只能用来查询变量或属性的类型,无法查询其他形式的类型(比如,函数调用的类型)。

相关文章:

TypeScript快速入门———(二)TypeScript常用类型

文章目录概述1 类型注解2 常用基础类型概述3.原始类型4 数组类型5 类型别名6.函数类型7 对象类型8 接口9 元组10 类型推论11 类型断言12 字面量类型13 枚举14 any 类型15 typeof概述 TypeScript 是 JS 的超集&#xff0c;TS 提供了 JS 的所有功能&#xff0c;并且额外的增加了…...

Mac M1 使用Centos8➕VMware Fusion进行静态网络配置

大部分的流程网络上面都有当我们已经下载好mac m1版的Centos8链接: https://pan.baidu.com/s/1UTl4Lo-_c17s-PDj3dA6kA 提取码: 7xh2 和VMware Fusionhttps://www.vmware.com/cn/products/fusion.html之后就可以进行安装了在导入过后 记得将硬盘和内存都设置好了 记得在关机状态…...

RadGraph: Extracting Clinical Entities and Relations from Radiology Reports代码

文章来源&#xff1a;NeurIPS 文章类别&#xff1a;IE(Information Extraction) RadGraph主要基于dygie&#xff0c;主要文件为inference.py。 inference.py&#xff1a; 1、get_file_list(data_path) def get_file_list(path):file_list [item for item in glob.glob(f&q…...

13. OPenGL与QT界面元素交互控制图形渲染

1. 说明&#xff1a; 前面文章中讲到的 OPenGL 渲染都是在页面加载完成即立刻渲染的&#xff0c;如果向控制图形渲染的时间&#xff0c;可以在QT界面中添加一些元素来进行控制。此时需要用到OPenGL当中的makeCurrent(),update(),doneCurrent()函数。 效果展示&#xff1a; ope…...

高通平台开发系列讲解(USB篇)libuvc详解

文章目录 一、什么是UVC二、UVC拓扑结构三、libuvc的预览时序图沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇文章将介绍libuvc。 一、什么是UVC UVC,全称为:USB video(device) class。 UVC是微软与另外几家设备厂商联合推出的为USB视频捕获设备定义的协议标…...

ICC2:set_route_opt_target_endpoints

route_opt阶段通过指定endpoint/driver pin list的方式执行incremental优化。 set_route_opt_target_endpoints [-setup_endpoints file] [-setup_endpoints_collection pin_list] [-hold_endpoints file] [-hold_endpoints_collection pin_list] [-ldrc_objects fil…...

5、小程序面试题

1, 小程序页面有哪些生命周期函数onLoad: 页面加载onReady: 页面初次渲染完成onShow: 页面显示onHide: 页面隐藏onUnload: 页面卸载2, 一页小程序页面有哪些文件组成,分别有什么作用.wxml: 使用微信框架设计的一套组件构建页面结构.wxss: 用于设置页面样式, 和css基本一致.js :…...

Java特殊操作流

6 特殊操作流 6.1 标注输入输出流 System类中有两个静态的成员变量&#xff1a; public static final InputStream in&#xff1a;标准输入流&#xff0c;通常该流对应于键盘输入或由主机环境或用户指定的另一个输入源public static final PrintStream out&#xff1a;标准输…...

如何用SCRM销售管理系统管理销售和做销售管理

每一家企业都在找适合自己公司的销售管理方法&#xff0c;实现销售目标和努力提高业绩。 我们常说&#xff0c;做好销售管理有很多路径和方法&#xff0c;但我们不知道从哪里开始&#xff1f;每个阶段我们该怎么办&#xff1f;如何有效管理销售团队&#xff1f;好的企企业微信…...

分享117个HTML婚纱模板,总有一款适合您

分享117个HTML婚纱模板&#xff0c;总有一款适合您 117个HTML婚纱模板下载链接&#xff1a;https://pan.baidu.com/s/1cC3I5cfh91-KmQj4nfSoPA?pwd9hod 提取码&#xff1a;9hod Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 import os import shutil import …...

VIVADO2022 sdk 工程创建流程

正点原子uart历程复现 create block design&#xff08;起名 为System&#xff09; -> open block design -> 号/IP catalog 中搜索zynq 双击打开&#xff0c; 将和pl相关的时钟都干掉 再auto 布线一下 把herarchy中的sources 中的system.bd右键、 无脑下一步导出 如…...

【MyBatis】源码学习 02 - Java 元注解以及 MyBatis @Param 注解分析

文章目录前言参考目录学习笔记1、Java 注解1.1、Java 元注解1.2、Java ElementType 枚举值1.3、自定义注解2、Param 注解分析2.1、Param 注解2.2、测试方法2.3、流程分析&#xff08;重点&#xff1a;ParamNameResolver&#xff09;前言 本文内容对应的是书本第 7 章的内容&am…...

贪心算法-蓝桥杯

一、贪心算法的优缺点优点&#xff1a;1.容易理解:生活常见。2.操作简单:在每一步都选局部最优。3.效率高: 复杂度常常是O(1)的。缺点&#xff1a;1.局部最优不一定是全局最优。二、例子: 最少硬币问题硬币面值1、2、5。支付13元&#xff0c;要求硬币数量最少。贪心法: (1) 5元…...

zookeeper 复习 ---- chapter03

zookeeper 复习 ---- chapter03如何创建 zookeeper 对象 要求&#xff1a; 1&#xff1a;知道这几个构造参数 2&#xff1a;知道每一个参数的含义 ZooKeeper(String connectString, int sessionTimeout, Watcher watcher) ZooKeeper(String connectString, int sessionTimeout…...

1.PostgreSQL

文章目录LIMITWITH 和RECURSIVEPostgreSQL 约束PostgreSQL AUTO INCREMENT&#xff08;自动增长&#xff09;PostgreSQL PRIVILEGES&#xff08;权限&#xff09;GRANT语法LIMIT SELECT * FROM COMPANY LIMIT 3 OFFSET 2;WITH 和RECURSIVE WITH RECURSIVE t(a,b) AS (VALUES (…...

buu [UTCTF2020]basic-crypto 1

题目描述&#xff1a; 01010101 01101000 00101101 01101111 01101000 00101100 00100000 01101100 01101111 01101111 01101011 01110011 00100000 01101100 01101001 01101011 01100101 00100000 01110111 01100101 00100000 01101000 01100001 01110110 01100101 00100000 0…...

火山引擎数智平台的这款产品,正在帮助 APP 提升用户活跃度

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 你有没有关注过 APP 给你推送的消息&#xff1f; 出于提升用户活跃度的考虑&#xff0c;APP 会定期在应用内面向用户进行内通推送&#xff0c;推送形式既包括 APP …...

记录每日LeetCode 2341.数组能形成多少数对 Java实现

题目描述&#xff1a; 给你一个下标从 0 开始的整数数组 nums 。在一步操作中&#xff0c;你可以执行以下步骤&#xff1a; 从 nums 选出 两个 相等的 整数从 nums 中移除这两个整数&#xff0c;形成一个 数对 请你在 nums 上多次执行此操作直到无法继续执行。 返回一个下标…...

Ant Design Chart词云图

什么是词云图&#xff1f;词云图&#xff0c;也叫文字云&#xff0c;是对网络文本中出现频率较高的“关键词”予以视觉上的突出&#xff0c;出现越多&#xff0c;显示的字体越大&#xff0c;越突出&#xff0c;这个关键词也就越重要。让浏览者通过词云图一眼就可以快速感知最突…...

mysql索引

索引 mysql索引&#xff1a; 在MySQL中&#xff0c;索引是存储引擎实现的&#xff0c;所以没有统一的索引标准&#xff0c;不同存储引擎的索引工作方式也不一样&#xff0c;也不是所有的存储引擎都支持所有类型的索引即使是多个存储引擎都支持同一种类型的索引&#xff0c;他…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...