Evan's blog Evan's blog
首页
关于
  • 分类
  • 标签
  • 归档
  • H5&CSS3
  • JS
  • TS
  • Node
  • Webpack
  • Vue2
  • Vue3
  • 微信小程序
  • Andorid
  • Flutter
推荐
GitHub (opens new window)

conanan

真相只有一个
首页
关于
  • 分类
  • 标签
  • 归档
  • H5&CSS3
  • JS
  • TS
  • Node
  • Webpack
  • Vue2
  • Vue3
  • 微信小程序
  • Andorid
  • Flutter
推荐
GitHub (opens new window)
  • 入门
  • JS变量类型
  • TS专属数据类型&使用
  • TS函数
  • TS类
  • TS接口 🔥
  • TS泛型 🔥
  • TS补充
    • 模块化&命名空间
      • 模块
      • 命名空间namespace
    • 类型的查找、声明 🔥
      • 内置类型声明
      • 外部定义类型声明和自定义声明
      • 声明模块、命名空间、变量、函数、类、文件
    • tsconfig.json文件
  • TS
xugaoyi
2022-03-30
目录

TS补充

# TS补充

# 模块化&命名空间

TypeScript支持两种方式来控制我们的作用域:

  • 模块化:每个文件可以是一个独立的模块,支持ES Module,也支持CommonJS;
  • 命名空间:通过namespace来声明一个命名空间

# 模块

# 命名空间namespace

命名空间在TypeScript早期时,称之为内部模块,主要目的是将一个模块内部再进行作用域的划分,防止一些命名冲突的问题。

export namespace time {
  export function format(time: string) {
    return "2222-02-22"
  }

  export function foo() {

  }

  export let name: string = "abc"
}

export namespace price {
  export function format(price: number) {
    return "99.99"
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 类型的查找、声明 🔥

就是为了不报错!

之前我们所有的typescript中的类型,几乎都是我们自己编写的,但是我们也有用到一些其他的类型

const imageEl = document.getElementById("image") as HTMLImageElement;
1

大家是否会奇怪,我们的HTMLImageElement类型来自哪里呢?甚至是document为什么可以有getElementById的方法呢?其实这里就涉及到typescript对类型的管理和查找规则了

先给大家介绍另外的一种typescript文件:.d.ts文件

  • 我们之前编写的typescript文件都是 .ts 文件,这些文件最终会输出 .js 文件,也是我们通常编写代码的地方;

  • 还有另外一种文件 .d.ts 文件,它是用来做类型的声明(declare)。 它仅仅用来做类型检测,告知typescript我们有哪些类型;

那么typescript会在哪里查找我们的类型声明呢?

  • 内置类型声明;
  • 外部定义类型声明;
  • 自己定义类型声明;

# 内置类型声明

内置类型声明是typescript自带的、帮助我们内置了JavaScript运行时的一些标准化API的声明文件

包括比如Math、Date等内置类型,也包括DOM API,比如Window、Document等;

内置类型声明通常在我们安装typescript的环境中会带有的,https://github.com/microsoft/TypeScript/tree/main/lib

# 外部定义类型声明和自定义声明

外部类型声明通常是我们使用一些库(比如第三方库)时,需要的一些类型声明。这些库通常有两种类型声明方式;

  • 在自己库中进行类型声明(编写.d.ts文件),比如axios
  • 通过社区的一个公有库DefinitelyTyped存放类型声明文件
    • 该库的GitHub地址:https://github.com/DefinitelyTyped/DefinitelyTyped/
    • 该库查找声明安装方式的地址:https://www.typescriptlang.org/dt/search?search=
    • 比如我们安装react的类型声明: npm i @types/react --save-dev

什么情况下需要自己来定义声明文件呢?

  • 我们使用的第三方库是一个纯的JavaScript库,没有对应的声明文件;比如lodash
  • 我们给自己的代码中声明一些类型,方便在其他地方直接进行使用;

# 声明模块、命名空间、变量、函数、类、文件

coderwhy.d.ts

// 声明模块
declare module 'lodash' {
  export function join(arr: any[]): void
}

// 声明变量/函数/类
declare let whyName: string
declare let whyAge: number
declare let whyHeight: number

declare function whyFoo(): void

declare class Person {
  name: string
  age: number
  constructor(name: string, age: number)
}

// 声明文件
declare module '*.jpg'
declare module '*.jpeg'
declare module '*.png'
declare module '*.svg'
declare module '*.gif'

// 声明命名空间
declare namespace $ {
  export function ajax(settings: any): any
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
  • 在开发vue的过程中,默认是不识别我们的.vue文件的,那么我们就需要对其进行文件的声明;
  • 在开发中我们使用了 jpg 这类图片文件,默认typescript也是不支持的,也需要对其进行声明

# tsconfig.json文件

用于配置TypeScript编译时的配置选项:https://www.typescriptlang.org/tsconfig

编辑 (opens new window)
上次更新: 2022/03/29, 17:35:37
TS泛型 🔥

← TS泛型 🔥

最近更新
01
重点
04-12
02
搭建项目
04-04
03
TS泛型 🔥
03-30
更多文章>
Theme by Vdoing | Copyright © 2019-2022 conanan | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式