TypeScript 语法及示例
TypeScript 是一种静态类型的编程语言,它是 JavaScript 的超集,添加了可选的类型系统和编译时的类型检查。以下是 TypeScript 的一些关键语法元素及其示例代码,帮助你更好地理解和使用 TypeScript。
1. 基本类型
TypeScript 支持多种基本类型,包括:
boolean
number
string
array
tuple
enum
any
void
null
和undefined
never
示例:
typescript
let isDone: boolean = false;
let age: number = 25;
let name: string = "Alice";
let list: number[] = [1, 2, 3];
let tuple: [string, number] = ["hello", 42];
enum Color { Red, Green, Blue };
let c: Color = Color.Green;
let notSure: any = 4;
notSure = "maybe a string";
function greet(): void {
console.log("Hello, world!");
}
let u: undefined = undefined;
let n: null = null;
// never 类型表示永远不会返回值的函数
function throwError(message: string): never {
throw new Error(message);
}
2. 变量声明与赋值
TypeScript 提供了两种主要的变量声明方式:var
、let
和 const
。推荐使用 let
和 const
。
示例:
typescript
let count: number = 0;
count = 1; // OK
const pi: number = 3.14;
// pi = 3.14159; // 错误,不能重新赋值
3. 函数
函数可以有参数和返回值类型。
示例:
typescript
function add(x: number, y: number): number {
return x + y;
}
// 箭头函数
const multiply = (x: number, y: number): number => x * y;
// 可选参数
function greet(name?: string) {
if (name) {
console.log(`Hello, ${name}!`);
} else {
console.log("Hello, stranger!");
}
}
greet("Alice"); // Hello, Alice!
greet(); // Hello, stranger!
4. 接口(Interfaces)
接口用于定义对象的形状。
示例:
typescript
interface Person {
firstName: string;
lastName: string;
}
function fullName(person: Person): string {
return `${person.firstName} ${person.lastName}`;
}
let alice: Person = {
firstName: "Alice",
lastName: "Smith"
};
console.log(fullName(alice)); // 输出: Alice Smith
5. 类(Classes)
TypeScript 支持面向对象编程,类可以包含属性和方法。
示例:
typescript
class Animal {
name: string;
constructor(theName: string) {
this.name = theName;
}
move(distanceInMeters: number = 0) {
console.log(`${this.name} moved ${distanceInMeters}m.`);
}
}
class Snake extends Animal {
constructor(name: string) {
super(name);
}
move(distanceInMeters = 5) {
console.log("Slithering...");
super.move(distanceInMeters);
}
}
let sam = new Snake("Sammy the Python");
sam.move(); // 输出: Slithering... Sammy the Python moved 5m.
6. 泛型(Generics)
泛型允许你编写可重用的组件,同时保持类型安全。
示例:
typescript
function identity<T>(arg: T): T {
return arg;
}
let output = identity<string>("myString"); // 类型为 string
console.log(output); // 输出: myString
// 使用泛型类
class GenericNumber<T> {
zeroValue: T;
add: (x: T, y: T) => T;
}
let myGenericNumber = new GenericNumber<number>();
myGenericNumber.zeroValue = 0;
myGenericNumber.add = function(x, y) { return x + y; };
console.log(myGenericNumber.add(10, 20)); // 输出: 30
7. 联合类型(Union Types)与交叉类型(Intersection Types)
联合类型允许一个变量可以是多个类型之一,而交叉类型则是将多个类型合并为一个类型。
示例:
typescript
// 联合类型
function printId(id: number | string) {
console.log("Your ID is: " + id);
}
printId(101); // 输出: Your ID is: 101
printId("202"); // 输出: Your ID is: 202
// 交叉类型
interface Bird {
fly(): void;
}
interface Fish {
swim(): void;
}
type FlyingFish = Bird & Fish;
function getSmallPet(): FlyingFish {
return {
fly() { console.log("Flying..."); },
swim() { console.log("Swimming..."); }
};
}
let pet = getSmallPet();
pet.fly(); // 输出: Flying...
pet.swim(); // 输出: Swimming...
8. 枚举(Enums)
枚举用于定义一组命名的常量。
示例:
typescript
enum Direction {
Up,
Down,
Left,
Right
}
let direction: Direction = Direction.Up;
console.log(direction); // 输出: 0
// 字符串枚举
enum Status {
Pending = "PENDING",
Completed = "COMPLETED"
}
let status: Status = Status.Pending;
console.log(status); // 输出: PENDING
9. 类型断言(Type Assertions)
类型断言允许你在特定情况下告诉编译器某个表达式的类型。
示例:
typescript
let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;
console.log(strLength); // 输出: 15
// 或者使用尖括号语法
let strLength2: number = (<string>someValue).length;
console.log(strLength2); // 输出: 15
10. 模块(Modules)
模块用于组织代码,避免命名冲突,并支持按需加载。
示例:
typescript
// math.ts
export function add(x: number, y: number): number {
return x + y;
}
// main.ts
import { add } from './math';
console.log(add(1, 2)); // 输出: 3
总结
以上是 TypeScript 中的一些基础语法和常用特性,涵盖了基本类型、变量声明、函数、接口、类、泛型、联合类型、交叉类型、枚举、类型断言和模块等内容。