自学内容网 自学内容网

TS 入门(九):TypeScript类型声明文件与异步编程

前言

在前几章中,我们学习了 TypeScript 的基础知识、函数与对象类型、接口与类、泛型编程、模块与命名空间、以及装饰器与高级类型操控。在本章中,我们将深入探讨 TypeScript 中的类型声明文件与异步编程。类型声明文件(.d.ts 文件)用于为 JavaScript 库提供类型定义,从而使 TypeScript 能够进行类型检查和自动补全。异步编程则包括 Promise、async/await 和异步迭代器等概念,用于处理异步操作。

回顾装饰器与高级类型操控

在上一章中,我们学习了以下内容:

  • 装饰器:包括类装饰器、方法装饰器、访问器装饰器、属性装饰器和参数装饰器。
  • 高级类型操控:包括类型别名、映射类型、条件类型和工具类型,日志装饰器和自定义工具类型。

在这里插入图片描述

正文开始如果觉得文章对您有帮助,请帮我三连+订阅,谢谢💖💖💖


1. 类型声明文件

a. 什么是类型声明文件(.d.ts)

类型声明文件用于描述现有 JavaScript 代码的类型结构,使 TypeScript 能够进行类型检查和代码提示。

// math.d.ts
declare module "math" {
  export function add(x: number, y: number): number;
  export const PI: number;
}

b. 编写和使用类型声明文件

你可以手动编写类型声明文件,也可以从 DefinitelyTyped 项目中获取。

// 使用 math.d.ts
import { add, PI } from "math";

console.log(add(5, 10)); // 15
console.log(PI); // 3.14

2. 异步编程

a. Promise 类型

Promise 用于处理异步操作,表示一个异步操作的最终完成(或失败)及其结果值。

function fetchData(url: string): Promise<string> {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      if (url) {
        resolve(`Data from ${url}`);
      } else {
        reject("Invalid URL");
      }
    }, 1000);
  });
}

fetchData("https://example.com")
  .then(data => console.log(data)) // "Data from https://example.com"
  .catch(error => console.error(error));

b. async/await

asyncawait 语法使得编写异步代码更加简洁和易读。

async function fetchDataAsync(url: string): Promise<string> {
  if (!url) {
    throw new Error("Invalid URL");
  }

  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(`Data from ${url}`);
    }, 1000);
  });
}

async function main() {
  try {
    const data = await fetchDataAsync("https://example.com");
    console.log(data); // "Data from https://example.com"
  } catch (error) {
    console.error(error);
  }
}

main();

c. 异步迭代器

异步迭代器用于处理异步数据流。

async function* asyncGenerator() {
  let i = 0;
  while (i < 3) {
    yield new Promise<number>(resolve => setTimeout(() => resolve(i++), 1000));
  }
}

async function iterateAsyncGenerator() {
  for await (const value of asyncGenerator()) {
    console.log(value); // 0, 1, 2
  }
}

iterateAsyncGenerator();

3. 并行执行与错误处理

a. Promise.all

Promise.all 用于并行执行多个 Promise,并在所有 Promise 完成后返回结果。

const promise1 = fetchData("https://example1.com");
const promise2 = fetchData("https://example2.com");

Promise.all([promise1, promise2])
  .then(results => {
    console.log(results[0]); // "Data from https://example1.com"
    console.log(results[1]); // "Data from https://example2.com"
  })
  .catch(error => console.error(error));

b. Promise.race

Promise.race 用于并行执行多个 Promise,并在第一个 Promise 完成后返回结果。

const slowPromise = new Promise<string>((resolve) => setTimeout(() => resolve("Slow"), 2000));
const fastPromise = new Promise<string>((resolve) => setTimeout(() => resolve("Fast"), 1000));

Promise.race([slowPromise, fastPromise])
  .then(result => console.log(result)) // "Fast"
  .catch(error => console.error(error));

c. 错误处理

在异步编程中,处理错误是非常重要的。

async function fetchDataWithErrorHandling(url: string): Promise<string> {
  try {
    if (!url) {
      throw new Error("Invalid URL");
    }

    const data = await new Promise<string>((resolve, reject) => {
      setTimeout(() => {
        resolve(`Data from ${url}`);
      }, 1000);
    });

    return data;
  } catch (error) {
    console.error("Error fetching data:", error);
    throw error;
  }
}

fetchDataWithErrorHandling("https://example.com")
  .then(data => console.log(data))
  .catch(error => console.error("Caught error:", error));

结语

通过本章的学习,你应该对 TypeScript 中的类型声明文件与异步编程有了更深入的理解。掌握这些内容将使你能够更加高效地处理异步操作,并为 JavaScript 库编写类型声明文件。在下一章中,我们将探讨 TypeScript 的项目配置、代码质量与前端框架集成,包括 tsconfig.json 高级配置、使用 Webpack 构建 TypeScript 项目、使用 Babel 编译 TypeScript、使用 ESLint 和 TSLint、使用 Prettier 格式化代码、使用 Jest 测试 TypeScript、使用 Mocha 和 Chai 测试 TypeScript、TypeScript 与 React、TypeScript 与 Angular、TypeScript 与 Vue 等内容。务必掌握好每个概念,它们将为你后续学习 TypeScript 提供坚实的基础。


原文地址:https://blog.csdn.net/cdns_1/article/details/140507875

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!