基础语法

2024-07-09 11:30:50 466
TypeScript的基础语法与教程

变量声明

letconst

  • let 声明的变量可以修改,const 声明的变量不可修改。
let isDone: boolean = false;
isDone = true; // 合法

const num: number = 6;
// num = 10; // 报错,不能修改

数据类型

基本类型

  • 布尔值 (boolean)
let isDone: boolean = true;
  • 数字 (number)
let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
let binaryLiteral: number = 0b1010;
let octalLiteral: number = 0o744;
  • 字符串 (string)
let name: string = "Bob";
name = 'Smith';
let sentence: string = `Hello, my name is ${name}.`;
  • 数组 (array)
let list: number[] = [1, 2, 3];
let list: Array<number> = [1, 2, 3];
  • 元组 (tuple)
let x: [string, number];
x = ["hello", 10]; // 合法
// x = [10, "hello"]; // 报错
  • 枚举 (enum)
enum Color {Red, Green, Blue}
let c: Color = Color.Green;
console.log(c); // 输出:1
  • 任意值 (any)
let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false;
  • 空值 (void)
function warnUser(): void {
    console.log("This is my warning message");
}
  • Null 和 Undefined
let u: undefined = undefined;
let n: null = null;

类型推断

  • TypeScript 会自动推断变量的类型,如果明确声明类型则不会推断。
let num = 10; // 推断为 number 类型

类型别名

  • 使用 type 关键字为类型定义别名。
type Name = string;
type NameResolver = () => string;
type NameOrResolver = Name | NameResolver;

接口

  • 定义和实现接口。
interface Person {
    firstName: string;
    lastName: string;
}

function greeter(person: Person) {
    return "Hello, " + person.firstName + " " + person.lastName;
}

let user = { firstName: "Jane", lastName: "User" };
console.log(greeter(user)); // 输出:Hello, Jane User

枚举

  • 枚举类型用于定义一组命名常量。
enum Color {Red, Green, Blue}
let c: Color = Color.Green;
console.log(c); // 输出:1

数组

  • 定义数组类型的两种方式。
let list: number[] = [1, 2, 3];
let list: Array<number> = [1, 2, 3];

函数

  • 函数的类型包括参数类型和返回值类型。
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; };
console.log(add(2, 3)); // 输出:5

类型断言

  • 类型断言可以通过两种方式使用。
let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;
let strLength: number = (someValue as string).length;

  • 定义和使用类。
class Greeter {
    greeting: string;
    constructor(message: string) {
        this.greeting = message;
    }
    greet() {
        return "Hello, " + this.greeting;
    }
}

let greeter = new Greeter("world");
console.log(greeter.greet()); // 输出:Hello, world

模块

  • 使用模块导入和导出代码。
// math.ts
export function add(x: number, y: number): number {
    return x + y;
}

// app.ts
import { add } from './math';
console.log(add(1, 2)); // 输出:3

类型守卫

  • 类型守卫用于在运行时检查类型。
function isString(x: any): x is string {
    return typeof x === "string";
}

function example(x: number | string) {
    if (isString(x)) {
        console.log(x.toUpperCase());
    } else {
        console.log(x.toFixed(2));
    }
}

example("hello"); // 输出:HELLO
example(3.14159); // 输出:3.14