TypeScript 基础语法

TypeScript 基础语法总结

TypeScript 是 JavaScript 的超集,核心增强是静态类型系统,以下是其基础语法的系统总结:

一、环境准备

  • 安装:npm install -g typescript(全局安装 TypeScript 编译器)

  • 编译:tsc 文件名.ts(将 TS 编译为 JS,默认生成同名 JS 文件)

  • 配置:通过 tsconfig.json 配置编译规则(如目标 JS 版本、模块规范等)

二、基本类型(核心)

TypeScript 扩展了 JS 的类型,支持显式类型注解,语法为 变量名: 类型

类型说明示例
number数字(整数、浮点数、NaN、Infinity)let age: number = 20
string字符串(单引号、双引号、模板字符串)let name: string = Tom${age}``
boolean布尔值(true/false)let isDone: boolean = false
null/undefined空值 / 未定义(默认是所有类型的子类型)let n: null = null
void表示函数无返回值(或返回 undefined)function log(): void { console.log(1) }
any任意类型(关闭类型检查,等同于原生 JS)let value: any = 'hello'; value = 123
unknown未知类型(比 any 更安全,使用前必须断言类型)let u: unknown = 'hi'; (u as string).length
never表示函数永不返回(如抛出错误、无限循环)function error(): never { throw new Error() }
object非原始类型(对象、数组、函数等)let obj: object = { name: 'Tom' }
数组两种写法:类型[]Array<类型>let nums: number[] = [1,2,3]Array<number>
元组(Tuple)固定长度和类型的数组(越界元素会被类型推断为联合类型)let tuple: [string, number] = ['a', 1]
枚举(Enum)定义命名常量集合(默认从 0 开始,可手动赋值)enum Direction { Up, Down = 2, Left, Right }(Up=0,Left=3)

三、变量声明

  • 语法:let/const/var 变量名[: 类型] = 值

  • 类型推断:声明时赋值,TS 会自动推断类型(可省略注解)

    例:let num = 10(自动推断为 number 类型)

四、函数

核心是参数类型返回值类型注解。

1. 基本语法
// 函数声明

function add(a: number, b: number): number {

&#x20; return a + b;

}

// 函数表达式

const multiply = (x: number, y: number): number => x \* y;
2. 特殊参数
  • 可选参数:参数名?(必须在必选参数后)

    function greet(name?: string): string { return name || 'Guest' }

  • 默认参数:参数名: 类型 = 默认值(自动推断为可选)

    function greet(name: string = 'Guest'): string { ... }

  • 剩余参数:...参数名: 类型[](收集剩余参数为数组)

    function sum(...nums: number[]): number { return nums.reduce((a,b)=>a+b, 0) }

五、接口(Interface)

用于定义对象 / 函数的类型结构,支持扩展和合并。

1. 基本用法(对象类型)
interface Person {

&#x20; name: string;       // 必选属性

&#x20; age?: number;       // 可选属性(?)

&#x20; readonly id: number; // 只读属性(初始化后不可修改)

}

// 实现接口(必须匹配结构)

const p: Person = { name: 'Tom', id: 1 };

p.id = 2; // 报错(只读属性)
2. 函数类型接口
interface SearchFunc {

&#x20; (source: string, keyword: string): boolean; // 入参和返回值类型

}

const search: SearchFunc = (s, k) => s.includes(k);
3. 接口继承
interface Student extends Person {

&#x20; grade: number; // 继承 Person 的属性,新增 grade

}

六、类型别名(Type)

与接口类似,但更灵活(可定义基本类型、联合类型等)。

// 基本类型别名

type Age = number;

let a: Age = 20;

// 联合类型(多种类型可选)

type StringOrNumber = string | number;

let val: StringOrNumber = '123' || 123;

// 交叉类型(合并多种类型)

type A = { a: number };

type B = { b: string };

type C = A & B; // { a: number; b: string }

接口 vs 类型别名

  • 接口可多次声明合并(interface A { x: number }; interface A { y: number } 合并为 {x,y}

  • 类型别名不可合并,更适合定义联合 / 交叉类型。

七、类型断言(Type Assertion)

手动指定变量类型(告诉 TS “我知道类型更具体”),两种语法:

// 方式1:值 as 类型(推荐,JSX 中唯一支持)

const strLength = (val: string | number): number => {

&#x20; return (val as string).length || val.toString().length;

};

// 方式2:<类型>值(不推荐,与 JSX 冲突)

const len = \<string>val.length;

八、类型守卫(Type Guard)

在联合类型中缩小类型范围,常用方式:

  1. typeof:判断基本类型(string/number/boolean/symbol

    if (typeof val === 'string') { ... }

  2. instanceof:判断对象类型(如 Date/Array

    if (val instanceof Date) { val.getFullYear() }

  3. in:判断对象是否有某个属性

    if ('name' in val) { ... }

  4. 自定义类型守卫:返回 x is 类型 的函数

function isString(x: unknown): x is string {

&#x20; return typeof x === 'string';

}

if (isString(val)) { val.length } // 自动推断为 string

九、类(Class)

TS 增强了类的类型控制,支持访问修饰符、抽象类等。

1. 基本语法(属性类型注解)
class Person {

&#x20; name: string; // 实例属性(需类型注解)

&#x20; age: number;

&#x20; constructor(name: string, age: number) {

&#x20;   this.name = name;

&#x20;   this.age = age;

&#x20; }

&#x20; sayHi(): string { // 方法返回值类型

&#x20;   return \`Hi, \${this.name}\`;

&#x20; }

}
2. 访问修饰符
  • public:默认,任意位置可访问

  • private:仅类内部可访问(子类不可)

  • protected:类内部和子类可访问

  • readonly:属性只读(初始化后不可修改)

class Student extends Person {

&#x20; private grade: number; // 仅 Student 内部可访问

&#x20; protected id: number;  // Student 和其子类可访问

&#x20; constructor(name: string, age: number, grade: number) {

&#x20;   super(name, age); // 调用父类构造函数

&#x20;   this.grade = grade;

&#x20;   this.id = 1;

&#x20; }

}
3. 抽象类(Abstract Class)
  • 不能实例化,仅用于继承

  • 抽象方法必须在子类中实现

abstract class Animal {

&#x20; abstract makeSound(): void; // 抽象方法(无实现)

}

class Dog extends Animal {

&#x20; makeSound(): void { // 必须实现抽象方法

&#x20;   console.log('Woof');

&#x20; }

}

十、泛型(Generics)

创建可复用的类型组件,支持多种类型(类似 “类型参数”)。

1. 泛型函数
// 定义:\<T> 为类型参数(约定用大写字母,如 T/U/V)

function identity\<T>(arg: T): T {

&#x20; return arg; // 输入和输出类型一致

}

// 调用(自动推断或显式指定)

identity(123); // 推断 T 为 number

identity\<string>('hello'); // 显式指定 T 为 string
2. 泛型约束(限制类型范围)
// 约束 T 必须有 length 属性

function getLength\<T extends { length: number }>(arg: T): number {

&#x20; return arg.length;

}

getLength('abc'); // 正确(string 有 length)

getLength(123); // 报错(number 无 length)
3. 泛型接口 / 类
// 泛型接口

interface Container\<T> {

&#x20; value: T;

}

const c: Container\<number> = { value: 10 };

// 泛型类

class Box\<T> {

&#x20; content: T;

&#x20; constructor(content: T) {

&#x20;   this.content = content;

&#x20; }

}

const box = new Box\<string>('apple');

十一、模块(Module)

与 ES6 模块一致,用 import/export 管理代码:

// 导出(module.ts)

export const name = 'TS';

export function add(a: number, b: number): number { return a + b; }

// 导入(main.ts)

import { name, add } from './module';

console.log(name); // 'TS'

总结

TypeScript 的核心是类型系统,通过静态类型检查提前规避错误。基础语法围绕 “类型定义” 展开,包括:基本类型、接口 / 类型别名、函数 / 类的类型约束、泛型等。掌握这些后,可进一步学习高级特性(如映射类型、条件类型等)。

### TypeScript 基础语法教程 TypeScript 是一种开源的编程语言,它扩展了 JavaScript 的功能,提供了静态类型检查和其他特性。以下是 TypeScript基础语法内容: #### 1. 变量声明 在 TypeScript 中,变量可以通过 `let` 或 `const` 关键字进行声明,并且可以指定其类型。例如: ```typescript let message: string = "Hello World"; // 声明一个字符串类型的变量 ``` 注意:这里的 `string` 是小写的,和 `String` 不同。`string` 是 TypeScript 中定义的字符串类型,而 `String` 是 ECMAScript 中定义的一个类[^2]。 #### 2. 数据类型 TypeScript 提供了多种数据类型,包括但不限于以下几种: - **字符串 (string)**:用于表示文本数据。 - **数字 (number)**:用于表示整数或浮点数。 - **布尔值 (boolean)**:用于表示真 (`true`) 或假 (`false`)。 - **数组 (Array)**:用于存储一组相同类型的值。 - **元组 (Tuple)**:用于存储固定数量和类型的值。 - **枚举 (Enum)**:用于定义一组命名的常量。 - **任意类型 (any)**:用于表示任意类型的值。 例如,元组的定义如下: ```typescript let t1: [number, string, number] = [1, 'a', 3]; // 元组限定了各个数组中的类型值 let t2: [number, string, number?] = [1, 'a']; // 后面加上一个?代表可选 ``` 上述代码中,`t1` 是一个包含三个元素的元组,分别对应 `number`、`string` 和 `number` 类型。而 `t2` 的第三个元素是可选的[^4]。 #### 3. 运算符 TypeScript 支持多种运算符,其中严格相等运算符 `===` 是一种重要的运算符。它不仅比较两个操作数的值,还比较它们的类型。如果两个操作数的类型和值都相同,则返回 `true`;否则返回 `false`。例如: ```typescript console.log(0 === ""); // 返回 false,因为它们的类型不同 console.log(null === undefined); // 返回 false,尽管在某些比较中它们被视为“相等” ``` 由于其严格性,使用 `===` 通常被认为是一种更好的编程实践,因为它减少了意外行为并提高了代码的可读性[^3]。 #### 4. 函数 函数在 TypeScript 中可以通过指定参数类型和返回值类型来增强代码的安全性。例如: ```typescript function add(a: number, b: number): number { return a + b; } ``` 上述代码中,`add` 函数接受两个 `number` 类型的参数,并返回一个 `number` 类型的结果。 #### 5. 接口 接口是 TypeScript 中的一种重要特性,用于定义对象的结构。例如: ```typescript interface Person { name: string; age: number; } let person: Person = { name: "Alice", age: 25, }; ``` 上述代码中,`Person` 接口定义了一个对象的结构,包含 `name` 和 `age` 属性。 #### 6. 在线练习 如果没有搭建 TypeScript 的开发环境,可以直接使用在线 Playground 平台(https://www.typescriptlang.org/play)进行编码练习[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值