美文网首页js css html
TypeScript 踩坑记录

TypeScript 踩坑记录

作者: alue | 来源:发表于2023-01-31 21:41 被阅读0次

本文探讨 TypeScript 如何在 d.ts文件中使用 import 语句.

在类型定义文件 typings/basic.d.ts 中,定义一个组件需要的数据类型

  interface BasicState {
    departmentTree: TreeSelectOption[];
  }

但这个 TreeSelectOption 类型是组件库提供的, 按照常规想法, 我们应该这样处理:

import TreeSelectOption from 'naive-ui'

interface BasicState {
departmentTree: TreeSelectOption[];
}

但问题是,这样加入 import 语句之后, basic.d.ts 中所定义的类型就全部失效了.

经过调研, 发现原理如下:
TypeScript 有两类模块声明, 局部模块全局模块. 局部模块就如同常规的 ESModules, 我们需要手动 import/export. 而全局模块则会自动导入当前模块,无须显示声明.
d.ts 文件就属于全局模块, 但有个前提: 不能使用 import 语句. 一旦使用 import, d.ts 文件就被当做局部模块, 需要手动导入才能使用, 这就是前面类型失效的原因. (我猜测这是防止出现循环引用的问题.)

那么, 如果的确需要在全局模块中引入第三方类型, 该怎么办呢? 可以采用动态导入的方法.以开头的案例来说, 可以采用如下方式:

  interface BasicState {
    departmentTree: import('naive-ui').TreeSelectOption[];
  }

不在外层使用独立的 import 语句, 而是使用内联 import 语句, 就能够避免 d.ts 文件变成局部模块.

相关文章

  • TypeScript 踩坑记录

    本文探讨 TypeScript 如何在 d.ts文件中使用 import 语句. 在类型定义文件 typings/...

  • react+typescript+antd 项目实战(1)

    前言 本文主要记录在开发react+typescript+antd项目过程中遇到的问题,踩过的坑,希望对看到的同学...

  • 我的前端笔记

    目录 react 小程序 vue typescript 经验(踩坑) react useMemo 和 useCal...

  • 2020-10-19随笔 踩坑0传值

    踩坑:当值传入0时,if条件判断时候会自己转换,记录踩坑。

  • Typescript踩坑点

    1,类型断言类型断言更像是类型的选择,而不是类型转换举例: 代码中要返回参数的长度,但是 length 可以是字符...

  • Weex入门踩坑记录

    Weex入门踩坑记录

  • Flutter 开发记录

    Flutter 开发踩坑记录(干货总结)

  • 日常bug记录

    想记录日常碰到的bug,坑踩多了,以后应该碰到坑就比较容易处理或者会少踩坑,后面会慢慢记录bug,截图bug以及最...

  • 没事请多踩踩坑!

    人生事不尽意,别人挖坑我踩坑。 请在这里留下你的踩坑记录,让别人少入坑。

  • Windows下GithubPages博客快速搭建

    Windows下开发坑总是比较多的,但是本人没Mac,只好踩一遍坑记录下。本文主要是安装过程&踩坑记录,故不对细节...

网友评论

    本文标题:TypeScript 踩坑记录

    本文链接:https://www.haomeiwen.com/subject/uehvhdtx.html