TypeScript 这篇就够了

目录

一、TypeScript的概述

二、TypeScript 官网

2.1TypeScript 官网地址

2.2安装TypeScript

三、TypeScript 语法

3.1 基本语法

3.2 类型系统

3.3 语句

3.4 函数

3.5 类和模块

3.6 高级特性

3.7 类型检查


一、TypeScript的概述

        TypeScript 是一种由微软开发和维护的开源编程语言。它是 JavaScript 的一个带类型系统的超集,编译为普通的 JavaScript,用于开发大型应用程序。TypeScript 为 JavaScript 语言添加了可选的静态类型、类、接口等特性,为大型团队和项目提供了更好的开发体验。
以下是 TypeScript 的关键特性:
        1. 静态类型:TypeScript 强制执行静态类型,这有助于在编译时捕捉错误,而不是在运行时,这可以使得调试和维护代码更加容易。
        2. 类型注解:开发者为变量、函数参数和返回类型提供类型信息,TypeScript 使用这些信息进行类型检查。
        3. 类和模块:TypeScript 支持 ES6 类和模块,这使得代码的组织和可重用性更好。
        4. 接口:TypeScript 使用接口来定义对象的结构和函数的形状,从而实现更健壮的 API 和更好的文档。
        5. 泛型:TypeScript 支持泛型,允许开发者创建可以与不同类型一起工作的组件,从而提高代码的重用性和类型安全性。
        6. 兼容性:TypeScript 旨在与现有的 JavaScript 代码和库兼容,允许开发者在项目中逐步采用 TypeScript。
        7. 工具链:TypeScript 拥有丰富的工具链,包括代码检查器、格式化器和包管理器,帮助维护代码质量和促进协作。

二、TypeScript 官网

2.1TypeScript 官网地址

TypeScript中文网 · TypeScript——JavaScript的超集 (tslang.cn)icon-default.png?t=N7T8https://www.tslang.cn/

2.2安装TypeScript

npm install -g typescript

三、TypeScript 语法


3.1 基本语法

  1. - 类型注解
  2. - 变量声明
  3. - 函数声明
  4. - 类声明
  5. - 接口
  6. - 泛型
  7. - 枚举
  8. - 类型推断

示例:

// 类型注解
let stringVar: string = "Hello, World!";
let numberVar: number = 42;
let boolVar: boolean = true;

// 变量声明
let uninitiatedVar: any; // 没有初始化的变量
uninitiatedVar = "Hello, TypeScript!";

// 函数声明
function add(a: number, b: number): number {
  return a + b;
}

// 箭头函数
const subtract = (a: number, b: number): number => {
  return a - b;
};

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

// 实例化类
let greeter = new Greeter("TypeScript");
console.log(greeter.greet());

// 接口
interface Person {
  name: string;
  age: number;
}

// 实现接口
function printPerson(person: Person): void {
  console.log(person.name + " is " + person.age + " years old.");
}

// 泛型
function identity<T>(arg: T): T {
  return arg;
}

// 枚举
enum Color {Red, Green, Blue}
let c: Color = Color.Green;

// 类型推断
let inferredVar = 42; // 类型为 number
let anotherInferredVar = "This is a string"; // 类型为 string

// 类型守卫
function isString(value: any): value is string {
  return typeof value === "string";
}

let str: string | number = "This is a string";
if (isString(str)) {
  console.log(str.toUpperCase());
} else {
  console.log(str + 10);
}

// 箭头函数使用类型守卫
const toUpperCase = (s: string): string => s.toUpperCase();

// 模块导入
import { Greeter } from './Greeter';

// 使用模块
let greeterFromModule = new Greeter("TypeScript");
console.log(greeterFromModule.greet());

3.2 类型系统

  1. - number
  2. - string
  3. - boolean
  4. - null 和 undefined
  5. - 数组和元组
  6. - 枚举类型
  7. - 联合类型
  8. - 交叉类型
  9. - 类型别名
  10. - 泛型类型

// 基本类型
let numberVar: number = 42;
let stringVar: string = "Hello, TypeScript!";
let boolVar: boolean = true;

// null 和 undefined
let nullVar: null = null;
let undefinedVar: undefined = undefined;

// 数组和元组
let numberArray: number[] = [1, 2, 3];
let stringArray: string[] = ["Hello", "World"];

// 元组类型
let tupleType: [string, number] = ["Hello", 123];

// 枚举类型
enum Color {Red, Green, Blue}
let c: Color = Color.Green;

// 联合类型
let unionType: string | number = "Hello";

// 交叉类型
interface PartialPerson {
  name?: string;
  age?: number;
}

let partialPerson: PartialPerson = { name: "Alice" };

// 类型别名
type Point = { x: number; y: number };
let point: Point = { x: 1, y: 2 };

// 泛型类型
function identity<T>(arg: T): T {
  return arg;
}

let identityFunction: <T>(arg: T) => T = identity;

// 泛型类
class Box<T> {
  private content: T;

  constructor(content: T) {
    this.content = content;
  }

  getContent(): T {
    return this.content;
  }
}

let box = new Box<string>("Hello, World!");
console.log(box.getContent());

// 泛型接口
interface Container<T> {
  getContent(): T;
}

class MyArray<T> implements Container<T> {
  private data: T[];

  constructor(initialData: T[]) {
    this.data = initialData;
  }

  getContent(): T {
    return this.data[0];
  }
}

let myArray = new MyArray<string>(["Hello", "World"]);
console.log(myArray.getContent());


3.3 语句

  1. - 条件语句(if, switch)
  2. - 循环语句(for, while, do-while)
  3. - 跳转语句(break, continue, return)
  4. - 声明语句(var, let, const)
  5. - 空语句(;)
  6. - 赋值语句
  7. - 表达式语句
  8. - 异步语句(async function, await)

示例:

// 条件语句
if (true) {
  console.log("条件为真");
} else {
  console.log("条件为假");
}

// 使用 switch 语句
switch (true) {
  case true:
    console.log("条件为真");
    break;
  case false:
    console.log("条件为假");
    break;
}

// 循环语句
// for 循环
for (let i = 0; i < 5; i++) {
  console.log(i);
}

// while 循环
let i = 0;
while (i < 5) {
  console.log(i);
  i++;
}

// do-while 循环
i = 0;
do {
  console.log(i);
  i++;
} while (i < 5);

// 跳转语句
// break 跳出循环
for (let i = 0; i < 10; i++) {
  if (i === 5) {
    break;
  }
  console.log(i);
}

// continue 跳过当前循环迭代
for (let i = 0; i < 10; i++) {
  if (i === 5) {
    continue;
  }
  console.log(i);
}

// return 退出函数
function myFunction() {
  if (true) {
    return "Hello, World!";
  }
  console.log("This line won't be executed");
}

// 声明语句
let varDeclaration: number = 42;
const constDeclaration: string = "Hello";

// 空语句
// 可以用作占位符
;

// 赋值语句
let assignement = 42;

// 表达式语句
console.log("Expression statement: " + (2 + 2));

// 异步语句
// async 函数
async function asyncGreet() {
  return "Hello, Async!";
}

// await 表达式
async function fetchData() {
  let response = await fetch("https://api.example.com/data");
  let data = await response.json();
  console.log(data);
}

fetchData();

3.4 函数

  1. - 函数声明
  2. - 箭头函数
  3. - 函数类型
  4. - 匿名函数
  5. - 构造函数
  6. - 函数表达式
  7. - 箭头函数表达式

示例:

// 函数声明
function add(x: number, y: number): number {
  return x + y;
}

// 调用函数
let result = add(1, 2);
console.log(result); // 输出: 3

// 箭头函数
const subtract = (x: number, y: number): number => {
  return x - y;
};

// 调用箭头函数
result = subtract(10, 5);
console.log(result); // 输出: 5

// 函数类型
type MyFunction = (x: number, y: number) => number;

// 匿名函数
const myAnonymousFunction: MyFunction = function(x, y) {
  return x * y;
};

// 调用匿名函数
result = myAnonymousFunction(2, 3);
console.log(result); // 输出: 6

// 构造函数
class Greeter {
  greeting: string;
  constructor(message: string) {
    this.greeting = message;
  }
  greet(): string {
    return "Hello, " + this.greeting;
  }
}

// 创建构造函数的实例
let greeter = new Greeter("TypeScript");
console.log(greeter.greet()); // 输出: Hello, TypeScript

// 函数表达式
const myFunctionExpression: MyFunction = function(x, y) {
  return x + y;
};

// 调用函数表达式
result = myFunctionExpression(4, 5);
console.log(result); // 输出: 9

// 箭头函数表达式
const myArrowFunctionExpression: MyFunction = (x, y) => {
  return x - y;
};

// 调用箭头函数表达式
result = myArrowFunctionExpression(10, 2);
console.log(result); // 输出: 8

3.5 类和模块

  1. - 类声明
  2. - 构造函数
  3. - 类继承
  4. - 模块导入导出
  5. - 命名空间

示例:

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

// 构造函数
let greeter = new Greeter("TypeScript");
console.log(greeter.greet()); // 输出: Hello, TypeScript

// 类继承
class Greeter2 extends Greeter {
  greeting2: string;
  constructor(message: string, greeting2: string) {
    super(message); // 调用父类的构造函数
    this.greeting2 = greeting2;
  }
  greet2(): string {
    return "Hello, " + this.greeting2;
  }
}

let greeter2 = new Greeter2("TypeScript", "World");
console.log(greeter2.greet()); // 输出: Hello, TypeScript
console.log(greeter2.greet2()); // 输出: Hello, World

// 模块导入导出
// 定义一个模块
export class Greeter3 {
  greeting: string;
  constructor(message: string) {
    this.greeting = message;
  }
  greet(): string {
    return "Hello, " + this.greeting;
  }
}

// 导入模块
import { Greeter3 } from "./Greeter3"; // 假设Greeter3模块在当前目录下的Greeter3.ts文件中

let greeter3 = new Greeter3("TypeScript");
console.log(greeter3.greet()); // 输出: Hello, TypeScript

// 命名空间
namespace MyNamespace {
  export class Greeter4 {
    greeting: string;
    constructor(message: string) {
      this.greeting = message;
    }
    greet(): string {
      return "Hello, " + this.greeting;
    }
  }
}

// 导入命名空间
import { Greeter4 } from "./MyNamespace"; // 假设MyNamespace模块在当前目录下的MyNamespace.ts文件中

let greeter4 = new MyNamespace.Greeter4("TypeScript");
console.log(greeter4.greet()); // 输出: Hello, TypeScript

3.6 高级特性

  1. - 装饰器(Decorators)
  2. - 代理(Proxies)
  3. - Reflect API
  4. - 解构赋值
  5. - 模板字符串
  6. - 默认参数
  7. - 可选链(Optional Chaining)
  8. - 扩展运算符(Spread Operator)
  9. - Promise 和 async/await

示例:

// 装饰器(Decorators)
@myDecorator
class Greeter {
  greeting: string;
  constructor(message: string) {
    this.greeting = message;
  }
  greet(): string {
    return "Hello, " + this.greeting;
  }
}

function myDecorator(constructor: Function) {
  console.log("Decorator called for " + constructor.name);
}

// 代理(Proxies)
const handler = {
  get(target, prop) {
    return target[prop] * 2;
  }
};

const numberProxy = new Proxy({}, handler);
numberProxy.a = 5;
console.log(numberProxy.a); // 输出: 10

// Reflect API
let obj = { a: 1, b: 2 };
console.log(Reflect.has(obj, "a")); // 输出: true

// 解构赋值
let { a, b } = obj;
console.log(a, b); // 输出: 1 2

// 模板字符串
const name = "TypeScript";
const greeting = `Hello, ${name}!`;
console.log(greeting); // 输出: Hello, TypeScript!

// 默认参数
function greet(name: string, greeting: string = "Hello") {
  console.log(greeting, name);
}
greet("TypeScript"); // 输出: Hello TypeScript

// 可选链(Optional Chaining)
const user = {
  info: {
    name: "TypeScript",
    age: 5
  }
};
console.log(user.info.name); // 输出: TypeScript
console.log(user?.info?.name); // 输出: TypeScript

// 扩展运算符(Spread Operator)
const arr1 = [1, 2, 3];
const arr2 = [...arr1, 4, 5];
console.log(arr2); // 输出: [1, 2, 3, 4, 5]

// Promise 和 async/await
async function fetchData() {
  let response = await fetch("https://api.example.com/data");
  let data = await response.json();
  return data;
}

fetchData().then((data) => {
  console.log(data);
});

3.7 类型检查

  1. - 类型断言
  2. - 类型守卫(type guards)
  3. - 类型查询(type queries)
  4. - 索引签名
  5. - 映射类型
  6. - 条件类型

示例:

// 类型断言
const myNumber: number = 42;
const myString: string = myNumber.toString(); // 类型断言

// 类型守卫(type guards)
function isString(value: any): value is string {
  return typeof value === "string";
}

function printLength(value: any) {
  if (isString(value)) {
    console.log(value.length);
  } else {
    console.log("Not a string");
  }
}

printLength("Hello"); // 输出: 5
printLength(123); // 输出: Not a string

// 类型查询(type queries)
const myVar: any = "Hello, World!";
const length: number = (myVar as string).length; // 类型查询

// 索引签名
interface StringArray {
  [index: number]: string;
}

const myArray: StringArray = ["Hello", "World"];
console.log(myArray[0]); // 输出: Hello

// 映射类型
type MyMapType = {
  [key: string]: number;
};

const myMap: MyMapType = {
  a: 1,
  b: 2
};

// 条件类型
type IfTrue<T, TResult extends true> = T extends true ? TResult : never;
type MyConditionalType = IfTrue<true, string>; // string

type IfFalse<T, TResult extends false> = T extends false ? TResult : never;
type MySecondConditionalType = IfFalse<false, number>; // number

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

探索星辰大海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值