鸿蒙HarmonyOS4.0应用开发从入门到实战(完结)
<<<下栽科>>>:789it.top/3228/
TypeScript 基本语法核心概念(无代码版)
一、TypeScript 与 JavaScript 的核心区别
TypeScript(TS)是
JavaScript 的超集
,在 JS 基础上增加了
静态类型系统
,支持类型注解、接口定义、泛型等特性,最终编译为纯 JS 运行。核心目标是
在开发阶段捕获类型错误
,提升代码可读性和可维护性。
二、基础类型系统
-
基础数据类型
-
any
:关闭类型检查(慎用,失去 TS 意义)。 -
unknown
:安全的 “未知类型”(需类型断言后使用)。 -
never
:表示永不存在的值(如抛出异常的函数返回类型)。
-
数组(
Array<T>
或T[]
,如number[]
表示数字数组)。 -
元组(
[T1, T2]
,固定长度和类型的数组,如[string, number]
)。 -
枚举(
enum
,为数值或字符串定义具名常量,如enum Color { Red, Green }
)。
-
原始类型:布尔(
boolean
)、数值(number
,含整数和浮点数)、字符串(string
)、空值(void
,函数无返回值时用)、null
、undefined
。 -
复杂类型:
-
特殊类型:
-
类型注解
-
显式声明变量、函数参数、返回值的类型,如:
let count: number = 0;
(变量类型)、function add(a: number, b: number): number { ... }
(函数参数和返回值类型)。 -
类型推断:TS 可自动推导类型(如
let str = "hello"
,推断为string
),减少冗余注解。
-
联合类型与交叉类型
-
联合类型(
T | U
):表示值可以是多种类型之一,如string | number
(字符串或数字)。 -
交叉类型(
T & U
):表示同时具备多种类型的所有属性,如{ name: string } & { age: number }
(同时有name
和age
属性的对象)。
三、接口(Interface)与类型定义
-
接口(Interface)
-
对象接口:
interface User { id: number; name: string; }
(规定对象必须包含id
和name
)。 -
函数接口:
interface AddFn { (a: number, b: number): number; }
(规定函数参数和返回值类型)。 -
可扩展(用
extends
继承其他接口),支持可选属性(name?: string
)和只读属性(readonly id: number
)。
-
定义对象、函数或类的 “形状”(Shape),用于约束结构:
-
类型别名(Type Alias)
-
为任意类型起别名,包括基础类型、联合类型、对象类型等:
type ID = number | string;
(定义ID
为数字或字符串)、
type Point = { x: number; y: number };
(等价于接口,但更灵活,可用于原始类型)。
四、函数与类型
-
函数参数类型
-
支持 可选参数(
(a: number, b?: number)
)、默认参数((a: number, b: number = 0)
)、剩余参数((...args: number[])
,收集所有剩余参数为数组)。
-
函数返回值类型
-
显式声明返回类型(如
(): void
表示无返回值),或依赖类型推断。
-
函数重载
-
定义多个函数签名,根据参数类型返回不同类型,解决 TS 对复杂函数的类型推断问题(如根据输入参数返回不同格式的结果)。
五、泛型(Generics)
-
定义 “类型可变” 的函数、类或接口,避免重复代码,提升复用性:
-
泛型函数:
function identity<T>(arg: T): T { return arg; }
(T
为类型参数,调用时自动推断或显式指定)。 -
泛型类:
class Queue<T> { enqueue(item: T) { ... } }
(支持不同类型的队列)。 -
泛型约束:通过
extends
限制类型参数的范围(如T extends Number
表示T
必须是数字类型的子类型)。
-
六、类(Class)与面向对象
-
类的定义
-
public
(公共,默认)、private
(私有,仅限类内访问)、protected
(受保护,子类可访问)。 -
readonly
(只读属性,初始化后不可修改)。
-
支持 修饰符:
-
继承(
class Child extends Parent
),实现接口(class User implements Person
)。
-
静态成员
-
静态属性和方法(
static
修饰),通过类名直接调用(如Class.staticMethod()
)。
七、模块与命名空间
-
模块(Module)
-
支持 ES6 模块语法(
import/export
),每文件为一个模块,避免全局命名冲突:
import { User } from './user';
(导入模块中的类型或对象)、
export default function fn() { ... }
(导出默认函数)。
-
命名空间(Namespace)
-
用于组织代码,避免全局污染,通过
namespace
定义:typescript
namespace Utils { export function add(a: number, b: number) { ... }}// 使用:Utils.add(1, 2);
八、类型断言(Type Assertion)
-
手动告诉编译器 “这个值的类型是确定的”,解决无法自动推断的场景:
-
const el = document.getElementById('app') as HTMLDivElement;
(断言为HTMLDivElement
)。 -
两种形式:
as Type
或<Type>value
(在 JSX 中只能用as
)。
-
九、编译与工具链
-
tsconfig.json 配置
-
target
:编译为哪个版本的 JS(如 ES6、ES2020)。 -
module
:模块系统(如ESNext
、CommonJS
)。 -
strict
:开启严格类型检查(推荐启用,捕获更多错误)。 -
outDir
:编译后 JS 文件输出目录。
-
核心选项:
-
类型检查工具
-
编辑器集成(如 VS Code 实时类型提示)、命令行工具(
tsc
编译并检查类型错误)。
总结:TypeScript 语法的核心价值
TypeScript 通过
类型系统
将错误提前到开发阶段,结合接口、泛型、模块等特性,让大型项目的代码结构更清晰、可维护性更强。核心语法围绕 “
类型安全
” 展开,学习时需重点掌握类型注解、接口定义、泛型应用,以及如何利用类型系统提升代码质量。