TypeScript 基础
TypeScript 是 JavaScript 的超集,提供了可选的静态类型和基于类的面向对象编程。
1. 基础类型
1.1 原始类型
// Boolean
let isDone: boolean = false;
// Number - 支持十进制、十六进制、二进制和八进制
let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;
// String - 支持模板字符串
let color: string = "blue";
let sentence: string = `Color is ${color}`;
// Symbol
const sym: symbol = Symbol("key");
1.2 数组和元组
// 数组
let list1: number[] = [1, 2, 3];
let list2: Array<number> = [1, 2, 3];
// 元组 - 固定长度的数组,每个位置有特定的类型
let tuple: [string, number] = ["hello", 10];
1.3 特殊类型
// any - 任意类型,跳过类型检查
let notSure: any = 4;
notSure = "maybe a string";
notSure = false;
// unknown - 类型安全的any
let value: unknown = 4;
if (typeof value === "string") {
console.log(value.toUpperCase());
}
// void - 通常用于函数返回值
function warnUser(): void {
console.log("Warning message");
}
// never - 永不返回的函数
function error(message: string): never {
throw new Error(message);
}
// null 和 undefined
let u: undefined = undefined;
let n: null = null;
2. 接口和类型
2.1 接口
// 基本接口
interface Point {
x: number;
y: number;
readonly z?: number; // 可选且只读属性
}
// 函数接口
interface SearchFunc {
(source: string, subString: string): boolean;
}
// 类接口
interface ClockInterface {
currentTime: Date;
setTime(d: Date): void;
}
// 扩展接口
interface Shape {
color: string;
}
interface Square extends Shape {
sideLength: number;
}
2.2 类型别名
// 基本类型别名
type Name = string;
type NameResolver = () => string;
type NameOrResolver = Name | NameResolver;
// 字面量类型
type Direction = "North" | "South" | "East" | "West";
type DiceRoll = 1 | 2 | 3 | 4 | 5 | 6;
// 交叉类型
type Employee = Person & { employeeId: number };
3. 函数
3.1 函数类型
// 函数声明
function add(x: number, y: number): number {
return x + y;
}
// 函数表达式
let myAdd: (x: number, y: number) => number =
function(x: number, y: number): number { return x + y; };
// 可选参数和默认参数
function buildName(firstName: string, lastName?: string): string {
return lastName ? firstName + " " + lastName : firstName;
}
// 剩余参数
function buildList(items: string, ...restItems: string[]): string[] {
return [items, ...restItems];
}