Skip to content

TypeScript 类型声明

1. 基本类型

TypeScript 提供了几种基本类型:

布尔值(Boolean)

typescript
let isDone: boolean = false;

数字(Number)

typescript
let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;

字符串(String)

typescript
let color: string = "blue";
color = 'red';

数组(Array)

typescript
let list: number[] = [1, 2, 3];
let list: Array<number> = [1, 2, 3]; // 泛型语法

TIP

泛型的基本概念

泛型使得定义函数、接口或类时,可以处理各种类型,而不需要在定义时指定具体类型。通过使用泛型,可以在使用时传递具体的类型参数,从而达到类型的灵活性和复用性。

泛型的语法

<T> 是一个类型参数,它的名字可以是任意的(例如 <U>, <V> 等等),但是常用的名字是 T,代表 Type。

元组(Tuple)

typescript
let x: [string, number];
x = ["hello", 10]; // OK
x = [10, "hello"]; // Error

枚举(Enum)

typescript
enum Color {Red, Green, Blue}
let c: Color = Color.Green;

Any

typescript
let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // 也可以是布尔值

Void

typescript
function warnUser(): void {
    console.log("This is my warning message");
}

Null 和 Undefined

typescript
let u: undefined = undefined;
let n: null = null;

Never

typescript
function error(message: string): never {
    throw new Error(message);
}

Object

typescript
declare function create(o: object | null): void;
create({ prop: 0 }); // OK
create(null); // OK
create(42); // Error
create("string"); // Error

2. 类型断言

类型断言有两种形式:

typescript
let someValue: any = "this is a string";

let strLength: number = (<string>someValue).length;
// 或
let strLength: number = (someValue as string).length;

3. 接口(Interfaces)

接口是一种定义对象结构的方式:

typescript
interface LabelledValue {
    label: string;
}

function printLabel(labelledObj: LabelledValue) {
    console.log(labelledObj.label);
}

let myObj = {size: 10, label: "Size 10 Object"};
printLabel(myObj);

4. 函数类型

可以使用接口定义函数类型:

typescript
interface SearchFunc {
    (source: string, subString: string): boolean;
}

let mySearch: SearchFunc;
mySearch = function(source: string, subString: string) {
    let result = source.search(subString);
    return result > -1;
}

5. 类(Classes)

TypeScript 支持基于类的面向对象编程:

typescript
class Greeter {
    greeting: string;
    constructor(message: string) {
        this.greeting = message;
    }
    greet() {
        return "Hello, " + this.greeting;
    }
}

let greeter = new Greeter("world");

6. 泛型(Generics)

泛型允许创建可重用的组件:

typescript
function identity<T>(arg: T): T {
    return arg;
}

let output = identity<string>("myString");

7. 高级类型

联合类型(Union Types)

typescript
function padLeft(value: string, padding: string | number) {
    // ...
}

交叉类型(Intersection Types)

typescript
interface ErrorHandling {
    success: boolean;
    error?: { message: string };
}

interface ArtworksData {
    artworks: { title: string }[];
}

type ArtworksResponse = ArtworksData & ErrorHandling;

类型别名(Type Aliases)

typescript
type Name = string;
type NameResolver = () => string;
type NameOrResolver = Name | NameResolver;

结语

这个教程涵盖了 TypeScript 中最常用的类型概念。要深入了解 TypeScript,建议查阅官方文档和实践更多的编码示例。