TypeScript语法快速上手

TypeScript语法

  • 对比
  • ts编译器
  • 类型注解
  • 新增类型
    • 数组
    • 自定义类型注解
    • 函数类型
    • 对象类型
    • 元组类型
    • 类型推断
    • 枚举类型

对比

最大区别:ts能在编译时就能发现类型错误的问题,而js只有在系统运行时再通过异常中断来发现
ts的底层仍是js,但ts能够有效减少系统出现问题的概率

特性TypeScriptJavaScript
类型系统静态类型系统,支持类型注解和类型推断。动态类型系统,类型检查发生在运行时。
编译需要经过编译过程,将 TypeScript 转换成 JavaScript。不需要编译,可以直接在浏览器或 Node.js 中执行。
类型注解支持类型注解,允许明确地指定变量的类型。不支持类型注解,变量类型由赋值确定。
高级特性提供一些 JavaScript 不支持的高级特性,如枚举、泛型、命名空间等。JavaScript 没有类似的特性。
生态系统逐渐在 JavaScript 的生态系统中获得了广泛的支持和应用。有一个庞大的生态系统,包括各种库和框架。
类型检查在编码阶段进行类型检查,可以检测类型错误。类型检查发生在运行时,不能在编码阶段捕获所有类型错误。
使用场景适用于大型项目和团队,提高代码的可维护性和可读性。适用于小型项目和快速原型开发,灵活性更高。

在这里插入图片描述

ts编译器

浏览器以及NodeJs是不认ts代码,所以,需要使用编译器将ts转为js代码

npm i -g typescript

i: 是 install 的简写,表示安装的意思。在 npm 命令中,npm install 用于安装指定的 Node.js 模块或工具包。

-g: 是 global 的缩写,表示全局安装的意思。当指定 -g 选项时,npm 将会把模块安装到全局环境中,而不是当前项目的 node_modules 目录中。全局安装的模块可以在系统的任何位置使用。

编译命令

tsc <文件名>

在这里插入图片描述
在这里插入图片描述
运行命令

可以使用node的ts-node命令,该命令可以编译运行ts文件

类型注解

在 TypeScript 中,可以使用类型注解来为变量、函数参数、函数返回值等添加类型信息,以帮助编译器进行类型检查和推断,提高代码的可读性和可维护性。
用法很简单,就是在js的变量后面加上冒号和类型注解即可

  1. 基本类型注解(Basic Types)

    • number: 表示数字类型。
    • string: 表示字符串类型。
    • boolean: 表示布尔类型。
    • null: 表示空值类型。
    • undefined: 表示未定义类型。
    • void: 表示没有任何返回值的类型。
    • symbol: 表示符号类型(ES6 新增)。
    • bigint: 表示大整数类型(ES2020 新增)。
  2. 复合类型注解(Compound Types)

    • object: 表示非原始类型,即除 number、string、boolean、null 和 undefined 之外的类型。
    • array: 表示数组类型,可以使用 type[]Array<type> 来表示。
    • tuple: 表示元组类型,允许表示一个已知元素数量和类型的数组。
    • enum: 表示枚举类型,用于定义一组命名的常量值。
    • union: 表示联合类型,表示一个值可以是多种类型中的一种。
    • intersection: 表示交叉类型,表示一个值可以同时具有多种类型的特性。
  3. 函数类型注解(Function Types)

    • (param1: type1, param2: type2, ...) => returnType: 表示函数类型,指定函数参数和返回值的类型。
    • (type1, type2) => returnType: 表示函数类型的简写形式,省略参数名。
  4. 类型别名注解(Type Aliases)

    • type: 使用 type 关键字定义一个类型别名,可以给复杂的类型起一个简洁的名称。
  5. 接口注解(Interfaces)

    • interface: 使用 interface 关键字定义一个接口,用于描述对象的结构和行为。
  6. 泛型注解(Generics)

    • <T>: 表示泛型类型,可以在函数、类、接口中使用泛型来增加代码的灵活性和复用性。

下面是一些 TypeScript 代码示例,演示了如何使用不同类型注解:

  1. 基本类型注解
let num: number = 10;
let str: string = "Hello";
let bool: boolean = true;
let n: null = null;
let u: undefined = undefined;
let v: void = undefined; // void 类型只能赋值为 undefined 或 null
let sym: symbol = Symbol("key");
let big: bigint = 100n; // bigint 需要在数字后面添加 "n"
  1. 复合类型注解
let obj: object = { name: "John", age: 30 };
let arr: number[] = [1, 2, 3];
let tuple: [string, number] = ["John", 30];
enum Color { Red, Green, Blue }
let color: Color = Color.Red;
let union: string | number = "hello";
let intersection: { a: number } & { b: string } = { a: 1, b: "hello" };
  1. 函数类型注解
// 定义函数类型注解
let add: (x: number, y: number) => number;// 定义函数实现
add = function(x, y) {return x + y;
};// 简写形式
let subtract: (x: number, y: number) => number = (x, y) => x - y;
  1. 类型别名注解
type MyString = string;
let strAlias: MyString = "Hello";
  1. 接口注解
interface Person {name: string;age: number;
}let person: Person = { name: "John", age: 30 };
  1. 泛型注解
function identity<T>(arg: T): T {return arg;
}let output = identity<string>("hello");

新增类型

ts新增许多类型

数组

TypeScript 中的数组类型语法包括两种形式:数组类型注解和泛型数组类型。

  1. 数组类型注解

数组类型注解是指定数组中元素的类型的一种方式,语法为 type[],其中 type 是数组中元素的类型。

let numbers: number[] = [1, 2, 3, 4, 5];
let strings: string[] = ["hello", "world"];
let mixed: (string | number)[] = ["hello", 1, "world", 2];
  1. 泛型数组类型

泛型数组类型使用泛型来定义数组的类型,语法为 Array<type>,其中 type 是数组中元素的类型。

let numbers: Array<number> = [1, 2, 3, 4, 5];
let strings: Array<string> = ["hello", "world"];
let mixed: Array<string | number> = ["hello", 1, "world", 2];

特别的,通过竖线,表示联合类型,表示一个数组中可以包含多种数据类型

自定义类型注解

TypeScript 中的类型别名(Type Aliases)语法格式为使用 type 关键字定义一个新的类型名称,可以基于现有的类型创建新的类型别名。类型别名可以让我们更加清晰和简洁地表示复杂的类型结构,提高代码的可读性和可维护性。

  1. 基本类型别名
type MyNumber = number;
type MyString = string;
type MyBoolean = boolean;

在这个例子中,我们定义了三个基本类型的别名 MyNumberMyStringMyBoolean,分别代表了 numberstringboolean 类型。

  1. 复合类型别名
type Point = {x: number;y: number;
};type Person = {name: string;age: number;
};

这里我们定义了两个复合类型的别名 PointPerson,分别代表了一个包含 xy 属性的坐标点和一个包含 nameage 属性的人员信息。

  1. 联合类型别名
type ID = string | number;

这里我们定义了一个联合类型的别名 ID,可以表示既可以是字符串类型也可以是数字类型的 ID。

  1. 交叉类型别名
type Dog = {name: string;breed: string;
};type Cat = {name: string;color: string;
};type Pet = Dog & Cat;

在这个例子中,我们定义了 DogCat 两种类型别名,然后使用交叉类型 & 定义了一个新的类型别名 Pet,表示既具有 Dog 特征又具有 Cat 特征的宠物类型。

  1. 函数类型别名
type MyFunction = (x: number, y: number) => number;const add: MyFunction = (a, b) => a + b;

这里我们定义了一个函数类型别名 MyFunction,表示接受两个 number 类型参数并返回一个 number 类型的函数,然后使用该别名定义了一个加法函数 add

函数类型

TypeScript 中的函数类型可以通过类型注解或类型别名来定义函数的参数类型、返回值类型等信息。

  1. 使用类型注解

使用类型注解时,直接在函数参数和返回值的位置指定类型。

function add(x: number, y: number): number {return x + y;
}

在这个例子中,函数 add 接受两个参数 xy,它们的类型都是 number,并且函数返回值的类型也是 number

  1. 使用类型别名

可以通过类型别名来定义函数类型,使得代码更加清晰和可维护。

type MyFunction = (x: number, y: number) => number;const add: MyFunction = (a, b) => a + b;

在这个例子中,我们定义了一个函数类型别名 MyFunction,表示接受两个 number 类型参数并返回一个 number 类型的函数。然后,我们使用该别名来定义一个加法函数 add

  1. 使用泛型

函数类型中也可以使用泛型来增加灵活性,特别是在处理通用类型的情况下。

type IdentityFunction<T> = (arg: T) => T;const identity: IdentityFunction<number> = (arg) => arg;

在这个例子中,我们定义了一个函数类型别名 IdentityFunction<T>,表示接受一个参数并返回相同类型的值的函数。然后,我们使用该别名定义了一个标识函数 identity,并指定泛型类型为 number

参数类型

  • 参数类型: 你可以为函数的参数指定类型。例如,(x: number, y: number) => number 表示这个函数接受两个参数,都是数字类型,返回值也是数字类型。

  • 返回值类型: 你可以为函数的返回值指定类型。例如,(x: number, y: number) => number 中的 number 表示这个函数的返回值是数字类型。

  • 可选参数和默认参数: 你可以在函数类型中使用可选参数和默认参数。例如,(x: number, y?: number) => number 表示 y 参数是可选的;(x: number, y: number = 0) => number 表示 y 参数有默认值为 0

  • 剩余参数: 你可以使用剩余参数来表示接受不定数量的参数。例如,(x: number, ...rest: number[]) => number 表示这个函数接受一个数字类型的参数 x,以及任意数量的数字类型的剩余参数,返回值是数字类型。

下面是一个示例,演示了如何使用 TypeScript 中的函数类型:

// 定义一个函数类型
type MathOperation = (x: number, y: number) => number;// 定义一个函数,符合 MathOperation 类型
const add: MathOperation = (x, y) => x + y;// 定义一个函数,符合 MathOperation 类型
const subtract: MathOperation = (x, y) => x - y;// 使用 add 和 subtract 函数
console.log(add(5, 3)); // 输出: 8
console.log(subtract(5, 3)); // 输出: 2

对象类型

TypeScript 中的对象类型可以通过接口(Interface)或类型别名(Type Aliases)来定义。对象类型用于描述具有特定属性和属性类型的对象结构。

  1. 使用接口

使用接口时,可以定义对象的属性名称和属性类型。

interface Person {name: string;age: number;email?: string; // 可选属性
}const person: Person = {name: 'Alice',age: 30,email: 'alice@example.com'
};

在这个例子中,我们定义了一个 Person 接口,该接口包含 nameage 两个必选属性,以及一个可选属性 email。然后我们创建了一个符合 Person 接口定义的对象 person

  1. 使用类型别名

使用类型别名时,可以将对象的结构定义为一个自定义的类型别名。

type Point = {x: number;y: number;
};const point: Point = {x: 10,y: 20
};

在这个例子中,我们定义了一个 Point 类型别名,表示具有 xy 两个属性的对象。然后我们创建了一个符合 Point 类型定义的对象 point

  1. 索引签名

可以使用索引签名来描述具有动态属性的对象结构。

interface Dictionary {[key: string]: number;
}const data: Dictionary = {age: 30,height: 180,weight: 75
};

在这个例子中,我们定义了一个 Dictionary 接口,该接口具有字符串类型的索引签名,表示对象的属性名是字符串类型,属性值是数字类型。然后我们创建了一个符合 Dictionary 接口定义的对象 data

元组类型

在 TypeScript 中,元组(Tuple)类型表示一个固定长度的数组,其中每个元素的类型可以是不同的。元组类型用于确保数组中每个位置的元素类型符合预期。

  1. 使用类型注解

可以通过指定每个位置的元素类型来创建元组类型。

let tuple: [number, string, boolean];
tuple = [10, 'hello', true];

在这个例子中,我们定义了一个元组类型,包含三个位置,分别是数字、字符串和布尔值类型。然后我们创建了一个符合这个类型定义的元组 tuple

  1. 使用类型别名

也可以使用类型别名来定义元组类型,使得代码更加清晰和可维护。

type MyTuple = [number, string, boolean];let tuple: MyTuple;
tuple = [10, 'hello', true];

在这个例子中,我们定义了一个元组类型别名 MyTuple,表示包含三个位置,分别是数字、字符串和布尔值类型的元组。然后我们创建了一个符合 MyTuple 类型定义的元组 tuple

元组类型的长度和每个位置的元素类型都是固定的,这使得元组类型在需要固定数量和类型的数组时非常有用。但需要注意的是,在访问元组的元素时,需要确保索引不超出元组的长度,否则会导致 TypeScript 编译错误。

在 TypeScript 中,数组(Array)和元组(Tuple)都是用来存储一系列元素的数据结构,但它们之间有一些重要的区别和异同点:

相同点:

  1. 存储多个元素: 无论是数组还是元组,它们都可以用来存储多个元素,可以通过索引访问这些元素。

  2. 支持泛型: 数组和元组都支持泛型,可以在定义时指定元素的类型。

  3. 可变性: 数组和元组都是可变的数据结构,可以动态添加、删除和修改元素。

不同点:

  1. 长度:

    • 数组:数组的长度是动态变化的,可以根据需要动态增加或减少元素。
    • 元组:元组的长度是固定的,在创建时就确定了,不能动态增加或减少元素的个数。
  2. 类型:

    • 数组:数组中的所有元素类型可以相同,也可以不同,但数组本身的类型是 Array
    • 元组:元组中的每个位置的元素类型是预定义的,元组本身的类型是由元素类型的顺序和数量决定的。
  3. 表示方式:

    • 数组:使用方括号 [ ] 表示,例如 [1, 2, 3]
    • 元组:使用圆括号 ( ) 表示,例如 (1, 'hello', true)
  4. 访问元素:

    • 数组:可以通过索引访问数组中的元素,索引从 0 开始。
    • 元组:同样可以通过索引访问元组中的元素,索引也是从 0 开始。
  5. 扩展性:

    • 数组:由于数组的长度可以动态变化,因此它更适合用来表示集合或列表等动态增长的数据结构。
    • 元组:元组的长度固定,适合用来表示固定长度和类型的数据结构,如坐标点 (x, y)

总的来说,数组更适合用于表示一系列相同类型的元素的集合,而元组更适合用于表示一组固定长度和类型的元素序列。选择使用数组还是元组取决于数据的特性以及在代码中的具体需求。

类型推断

TypeScript 中的类型推断是指编译器根据代码上下文自动推导出变量的类型,而无需显式地指定类型。类型推断可以减少代码中的冗余,提高代码的可读性和可维护性。

类型推断原理:

  1. 基于初始化值: 当变量声明时有初始化值时,TypeScript 编译器会根据初始化值推断出变量的类型。

  2. 基于上下文: 当变量在声明时没有初始化值,但在后续使用过程中有明确的赋值操作,TypeScript 编译器会根据赋值操作推断出变量的类型。

  3. 最佳通用类型: 当多个类型都符合上下文时,TypeScript 编译器会推断出一个最佳通用类型,使得代码更具可读性。

  4. 上下文中的类型推断: 当函数的返回值类型可以被上下文推断时,TypeScript 编译器会根据函数的实现推断出函数的返回值类型。

下面是一些示例代码,演示了 TypeScript 中的类型推断原理:

// 基于初始化值的类型推断
let num = 10; // TypeScript 推断 num 的类型为 number
let str = 'hello'; // TypeScript 推断 str 的类型为 string// 基于上下文的类型推断
let arr = [1, 2, 3]; // TypeScript 推断 arr 的类型为 number[]
arr.push(4); // 合法,因为 TypeScript 推断 arr 的类型为 number[]// 最佳通用类型的类型推断
let mixedArr = [1, 'hello', true]; // TypeScript 推断 mixedArr 的类型为 (string | number | boolean)[]
let bestType = [1, 2, 'hello']; // TypeScript 推断 bestType 的类型为 (string | number)[]// 上下文中的类型推断
function add(a: number, b: number) {return a + b;
}
let result = add(2, 3); // TypeScript 推断 result 的类型为 number

在这些示例中,TypeScript 编译器根据初始化值、赋值操作以及函数的上下文推断出变量的类型,使得代码具有更好的类型安全性和可读性。

枚举类型

TypeScript 中的枚举(Enum)类型是一种用户定义的数据类型,用于定义一组命名的常量值。枚举类型在编译时被转换为 JavaScript 对象,其成员可以是字符串或数字,并且可以具有初始化值。

枚举类型的语法格式如下:

enum EnumName {member1,member2,member3,// ...
}

其中,EnumName 是枚举类型的名称,member1member2member3 等是枚举成员的名称,它们可以是字符串或数字。如果枚举成员没有初始化值,则默认从 0 开始递增;如果枚举成员有初始化值,则后续成员的值依次递增。
等效于:
(member1 | member2 | member3)

下面是一个示例代码,演示了 TypeScript 中枚举类型的原理和用法:

// 定义一个名为 Direction 的枚举类型
enum Direction {Up, // 0Down, // 1Left, // 2Right // 3
}// 使用枚举成员
let playerDirection: Direction = Direction.Up;// 访问枚举成员的值
console.log(Direction.Up); // 输出: 0
console.log(Direction[0]); // 输出: "Up"// 使用枚举成员作为函数参数
function move(direction: Direction) {switch (direction) {case Direction.Up:console.log('向上移动');break;case Direction.Down:console.log('向下移动');break;case Direction.Left:console.log('向左移动');break;case Direction.Right:console.log('向右移动');break;default:console.log('未知方向');}
}// 调用函数
move(Direction.Right); // 输出: 向右移动

在这个示例中,Direction 枚举类型定义了四个枚举成员,它们的值分别为 0、1、2、3。可以通过枚举成员的名称或值来访问枚举成员。然后,通过 move 函数使用枚举成员作为参数,根据不同的枚举成员执行相应的操作。

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

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

相关文章

代码随想录算法训练营第二十七天|131.分割回文串、93.复原IP地址

文档链接&#xff1a;https://programmercarl.com/ LeetCode131.分割回文串 题目链接&#xff1a;https://leetcode.cn/problems/palindrome-partitioning/ 思路&#xff1a;把回溯的树画出来就好很多。startIndex用来控制切割的位置 例如对于字符串abcdef&#xff1a; 组…

golang语言系列:Authentication、OAuth、JWT 认证策略

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 golang语言系列 文章&#xff0c;主要对编程通用技能 Authentication、OAuth、JWT 认证策略 进行学习 1.Basic Authentication认证 每个请求都需要将 用户名密码 进行base64编码后&#xff0c;放在请求头的Aut…

html基础:颜色的 5 种表示方法(最全!)

你好&#xff0c;我是云桃桃。一个希望帮助更多朋友快速入门 WEB 前端的程序媛&#xff0c;大专生&#xff0c;2年时间从1800到月入过万&#xff0c;工作5年买房。 分享成长心得。 HTML 颜色在网页设计中扮演着重要角色&#xff0c;给网页增加颜色可以增强用户体验&#xff0c;…

AI行业买英伟达GPU,花的钱比赚的多17倍

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 发布在https://it.weoknow.com 更多资源欢迎关注 有人却表示「很合理」。 搞 AI 大模型&#xff0c;实在太烧钱了。 我们知道&…

SpringBoot mybatis-starter解析

mybatis-starter使用指南 自动检测工程中的DataSource创建并注册SqlSessionFactory实例创建并注册SqlSessionTemplate实例自动扫描mappers mybatis-starter原理解析 注解类引入原理 查看对应的autoconfigure包 MybatisLanguageDriverAutoConfiguration 主要是协助使用注解来…

图像处理环境配置opencv-python

下载python&#xff0c;配置pip使用清华源下载镜像&#xff1a; pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 切换到python目录下&#xff0c;右击cmd&#xff0c;执行pip升级指令: python -m pip install --upgrade pip 下载opencv&#x…

JavaEE SSM框架学习——MacOS Eclipse环境搭建

MacOS环境搭建 安装Homebrew Homebrew是一个包管理器&#xff0c;我们可以通过它来安装许多软件 首先打开Homebrew中文官网(brew.sh/zh-cn) 如图所示&#xff0c;复制下面那行命令到你的Macbook终端 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Ho…

针对 qt的sqlite加密数据库sqlitecipher插件QtCipherSqlitePlugin

&#x1f482; 个人主页:pp不会算法^ v ^ &#x1f91f; 版权: 本文由【pp不会算法v】原创、在CSDN首发、需要转载请联系博主 &#x1f4ac; 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 文章目录 简介编译安装使用可视化工具查看完结 简介 在客户端存储…

太绝了!34张思维导图搞定Web安全知识架构

推荐关注 越来越多的朋友开始了解网络安全&#xff0c;但是不知道从哪里下手&#xff0c;网上的资源也很散乱&#xff0c;没有头绪&#xff0c;经常做无用功。 今天给大家分享几份网络安全思维导图&#xff0c;非常适合零基础入门或想进一步学习的小伙伴。 注&#xff1a;文…

leetcode 不同路径

62. 不同路径 问题描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的…

【数据处理包Pandas】DataFrame数据选择的基本方法

目录 一、选择行/列&#xff08;一&#xff09;读取文件&#xff08;二&#xff09;选择行&#xff08;三&#xff09;选择列&#xff08;四&#xff09;选择多行多列 二、带条件筛选&#xff08;一&#xff09;startswith()方法&#xff08;二&#xff09;mean()方法&#xff…

本地运行github上下载的项目--接Git入门篇

1.了解项目 这是一个基于Spring Boot 和 Mybatis Plus 构建的Java项目&#xff0c;很经典的外卖项目&#xff0c;参考b站的黑马瑞吉外卖。 2.构建项目 SpringBoot项目&#xff0c;首先下载一些常见的项目要求的组件。然后配置如下&#xff1a; 看README&#xff0c;在阅读该…

如何查找局域网内连接设备的IP地址?

如何查找局域网内连接设备的IP地址? 第一种方法:通过CMD指令 在电脑开始菜单中找到运行,点击打开,输入CMD,然后回车,如下图所示, 如下图所示,输入ipconfig/all,然后回车, 如下图所示,此时会扫描出所有的连接设备的IP地址、MAC地址以及网关等信息, 这时候在cmd命令窗…

设置浏览器声音外放,其他声音耳机里放

需求描述&#xff1a; 我想在耳机里听歌&#xff0c;浏览器里的声音外放 找到这个面板 让浏览器的声音输出设为&#xff0c;扬声器

超图打开不同格式的dem文件

dem&#xff0c;数字高程模型&#xff1b; dem文件的后缀是什么? 有*.dem格式的&#xff0c;也有Raster&#xff0c;ASCII和Tiff类型的。Raster类型的是一个raster文件夹里面有很多不同格式的文件共同组成了DEM文件的内容。ASCII类型的是个txt文件。Tiff类型的也是一个文件夹…

Learning Discriminative Representations for Skeleton Based Action Recognition

标题&#xff1a;基于骨架的动作识别的学习判别性表示 原文链接&#xff1a;Learning Discriminative Representations for Skeleton Based Action Recognition (thecvf.com) 源码链接&#xff1a;https://github.com/zhysora/FR-Head 发表&#xff1a;CVPR 摘要 最近&…

面试题:MySQL 优化篇

定位慢查询 &#x1f496; 开源工具 调试工具&#xff1a;Arthas&#xff08;阿尔萨斯&#xff09;运维工具&#xff1a;Prometheus&#xff08;普罗米修斯&#xff09;、Skywalking &#x1f496; MySQL 慢查询日志 # 开启 MySQL 慢查询日志开关 slow_query_log1 # 设置慢…

k8s入门到实战(七)—— 回顾:使用yaml文件配置pv、pvc、configmap部署mysql服务

实战&#xff1a;部署 mysql 服务 回顾加深 pv、pvc、configmap 删除所有 deployment、pv、pvc、configmap、StorageClass创建一个 nsf 挂载目录给 mysql mkdir -p /nfs/data/mysql创建 yaml 文件mysql-server.yaml # 创建pv apiVersion: v1 kind: PersistentVolume metadat…

黑马鸿蒙笔记 3

目录 11.ArkUI组件-Column和Row 12.ArkUI组件-循环控制 13.ArkUI组件-List 14.ArkUI组件-自定义组件 15.ArkUI组件-状态管理State装饰器 16.ArkUI组件-状态管理-任务统计案例 17.ArkUI组件-状态管理-PropLinkProvideConsume 11.ArkUI组件-Column和Row Colum和Row的交叉…

QT-飞机水平仪图标

QT-飞机水平仪图标 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 #include <stdio.h> #include <stdlib.h> #include <string.h>#include <QtCore> #include <QtGui> #include <QDebug> #include <QTableWidget&g…