TypeScript 基础语法
TypeScript 基础语法
1. 基础类型
1.1 原始类型
// 布尔值
let isActive: boolean = true;
let isCompleted: boolean = false;
// 数字(支持十进制、十六进制、二进制等)
let decimal: number = 42;
let hex: number = 0x2a; // 十六进制
let binary: number = 0b1010; // 二进制
// 字符串
let framework: string = "TypeScript";
let version: string = `4.0`; // 模板字符串
let greeting = `Hello ${framework} v${version}`;
1.2 复合类型
// 数组(两种声明方式)
let numbers: number[] = [1, 2, 3];
let strings: Array<string> = ["a", "b", "c"];
// 元组(固定长度和类型)
let userInfo: [string, number] = ["Alice", 28];
let rgb: [number, number, number] = [255, 0, 100];
1.3 特殊类型
// 枚举(默认从0开始)
enum Direction { Up, Down, Left, Right }
let move: Direction = Direction.Up;
// Any(动态类型,慎用)
let dynamicData: any = "可以是任意类型";
dynamicData = 42;
dynamicData = true;
// Void(无返回值)
function logMessage(): void {
console.log("This function returns nothing");
}
// Never(永不返回)
function throwError(message: string): never {
throw new Error(message);
}
2. 变量声明
2.1 基本声明
// let(块级作用域)
let counter: number = 0;
counter = 1; // 允许重新赋值
// const(常量)
const MAX_USERS: number = 100;
// MAX_USERS = 200; // 报错:不能重新赋值
// 类型推断
let inferredString = "自动推断为string类型";
let inferredNumber = 3.14; // 自动推断为number
2.2 解构赋值
// 数组解构
let [first, second, ...rest] = [1, 2, 3, 4];
console.log(rest); // 输出: [3, 4]
// 对象解构(带类型注解)
let {
username,
age
}: {
username: string;
age: number
} = { username: "Bob", age: 30 };
// 重命名解构
let { name: fullName, email: contact } = {
name: "Alice",
email: "alice@example.com"
};
3. 接口
3.1 基本接口
interface User {
readonly id: number; // 只读属性
name: string;
age?: number; // 可选属性
[prop: string]: any; // 任意属性
}
// 使用接口
function printUser(user: User) {
console.log(`ID: ${user.id}, Name: ${user.name}`);
}
let currentUser: User = {
id: 1,
name: "Alice",
gender: "female" // 任意属性
};
3.2 函数类型接口
interface SearchFunc {
(source: string, keyword: string): boolean;
}
let mySearch: SearchFunc = function(src, kw) {
return src.includes(kw);
};
4.类
4.1 基础类
class Animal {
private name: string; // 私有属性
constructor(name: string) {
this.name = name;
}
public move(distance: number = 0) {
console.log(`${this.name} moved ${distance}m`);
}
}
class Dog extends Animal {
bark() {
console.log("Woof! Woof!");
}
}
const dog = new Dog("Buddy");
dog.bark();
dog.move(10);
4.1 访问器与静态属性
class Employee {
private _fullName: string;
static company = "ACME";
get fullName(): string {
return this._fullName;
}
set fullName(name: string) {
this._fullName = name;
}
}
let emp = new Employee();
emp.fullName = "John Doe";
console.log(Employee.company); // 静态属性
5.函数
5.1 函数类型
// 完整函数类型
let add: (x: number, y: number) => number;
add = function(a, b) {
return a + b;
};
// 可选参数与默认值
function buildName(
firstName: string,
lastName?: string = "Smith"
): string {
return `${firstName} ${lastName}`;
}
5.2 剩余参数
function sum(...numbers: number[]): number {
return numbers.reduce((a, b) => a + b, 0);
}
console.log(sum(1, 2, 3)); // 输出: 6
6. 泛型
6.1 基础泛型
function identity<T>(arg: T): T {
return arg;
}
let output = identity<string>("TypeScript");
// 泛型接口
interface GenericArray<T> {
[index: number]: T;
}
let numArray: GenericArray<number> = [1, 2, 3];
6.2 泛型约束
interface Lengthwise {
length: number;
}
function loggingIdentity<T extends Lengthwise>(arg: T): T {
console.log(arg.length);
return arg;
}
loggingIdentity("hello"); // 输出: 5
7. 类型推断与断言
7.1 类型推断
let x = 3; // 推断为number
let y = [0, 1, null]; // 推断为(number | null)[]
7.2 类型断言
let someValue: any = "this is a string";
// 两种语法
let strLength1: number = (<string>someValue).length;
let strLength2: number = (someValue as string).length;
8. 模块系统
8.1 导出与导入
// math.ts
export function square(x: number): number {
return x * x;
}
// app.ts
import { square } from './math';
console.log(square(2)); // 输出: 4
8.2 默认导出
// logger.ts
export default class Logger {
log(message: string) {
console.log(message);
}
}
// app.ts
import MyLogger from './logger';
const logger = new MyLogger();
9. 进阶特性
9.1 类型别名
type StringOrNumber = string | number;
type Callback = (data: string) => void;
9.2 交叉类型
interface A { a: number }
interface B { b: string }
type C = A & B;
let obj: C = { a: 1, b: "hello" };
9.3 装饰器(实验性)
function sealed(constructor: Function) {
Object.seal(constructor);
Object.seal(constructor.prototype);
}
@sealed
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
}
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 枫月Blog
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果