ts在项目中的使用-三斜线引入 与 import区别

技术ts在项目中的使用-三斜线引入 与 import区别 ts在项目中的使用-三斜线引入 与 import区别ts 在项目中的使用
本次分享内容只涉及项目初始阶段如何引入ts及依赖插件的ts。
ts为类

ts在项目中的使用——引入三斜线与导入的区别

ts 在项目中的使用

这个分享只涉及如何在项目的初始阶段引入依赖于插件的ts和ts。

Ts是类型系统,js没有类型,引入是为了减少开发阶段的错误。

Ts有一个单独的配置文件,通常放在项目目录tsconfig.json中

{

compilerOptions': {

目标' : 'esnext ',

useDefineForClassFields ' : true,

模块' : 'esnext ',

模块解决方案' : '节点',

严格的:真的,

jsx': '保留',

sourceMap': true,

resolveJsonModule':为真,

esModuleInterop':真,

lib': ['esnext ',' dom'],

实验记录者:道,

baseURl“:”。/',

路径' : {

@/*”:[' src/*]

},

type ' :[' vite/client ']

},

包括' : ['src/**/*。ts ',' src/**/*.d.ts ',' src/**/*。tsx ',' src/**/*。vue']

}

TSJS运行时有两个系统。虽然有时代码是一起编写的,但它们也在运行时运行自己的代码。

比如从‘lo dash’导入{clone},js系统引入了clone函数,ts系统引入了clone函数的类型。

1.ts 文件相关术语

模块:包含导出或导入的文件,通常命名为xx.ts

从“lodash”进口lodash

console.log(lodash)

声明文件:没有实际运行代码的文件名通常为xx.d.ts

在声明文件中

声明文件也可以是模块文件,但它不包含实际运行的代码,因此所有导出的声明都是类型声明。

类型A={name:string}

声明常量a:A

2. 引入ts

npm安装类型脚本-D

安装typescript后,它会附带浏览器中使用的所有对象的定义文件,如dom、标签等。

const div : html dive element=document . create element(' div ')

3.引入依赖

3.1. 引入模块文件

导入模块文件通常是导入的。

从“”导入{A}。/a.ts '

const a:A={name:'gg'}

3.2. 引入非模块类的声明文件

使用三斜线引用有两种常见的方法:pathtypes.

两者的区别在于,types一般引入外部依赖的声明,path一般引入自己编写的声明。

例如,外部声明文件的位置是node _ modules/@ types/B/index . d . ts,内容是Type B={age3360 number}。使用路径和类型引入它的方法如下:

///引用路径=' node _ modules/@ types/b/index . d . ts '/

///引用类型='b' /

非模块声明文件引入后为全局类型,可以直接使用const b:B={age:100}。

这里可以看到,相比js文件的引入,ts多了一个寻址策略,会自动在node _ modules/@ type下查找文件。

3. 声明合并 官网地址

“声明合并”意味着编译器将相同名称的多个独立声明合并成一个声明。合并后的声明同时具有多个原始声明的特征。

的一个常见使用示例是扩展属性。

点击查看代码兴趣。

face C {
a:string
b:string
}
interface C {
c:string
}
const v:C = {a:'',b:'',c:''}

4. vite+vue3 工程中的常见配置

所有依赖插件,在官网中有详细说明如何使用类型。

4.1 vite 注入的全局类型

vite注入了例如import.meta.env.BASE_URL,在import.meta中不存env属性,所以需要对ImportMeta类型进行补充,
其文件位置在node_modules/vite/client.d.ts。打开文件可以看到没有使用export 或者import。所以其为非模块声明,引入需要用到:

/// reference types="vite/client" /

4.2 vue注入类型

vue类型文件在node_modules/vue/dist/vue.d.ts,打开后可以看到有export 和import关键字,所有必须使用import引入,
引入一次后可以在其它文件模块文件使用类型。
import 'vue'

4.2.1 注册全局组件

如果有注册全局组件,就需要对全局组件进行类型扩展。
如下扩展一个Layout组件

点击查看代码
import 'vue' // 此处说明此文件是模块文件
declare module 'vue' {
  export interface GlobalComponents {
   Layout: typeof import('./components/Layout.vue')['default']    
  }
}

4.2.2 注入.vue文件类型

当引入一个vue文件时,js编译器可以通过,但是ts却发现找不到。这是因为ts为.ts、.js、.tsx等文件已定义类型,vue文件需要手动定义类型

declare module '*.vue' {
	import { DefineComponent } from 'vue'
	// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types
	const component: DefineComponent{}, {}, any
	export default component
}

4.2.3. 别名设置

在某些时候,路径使用别名会很方便,比如将@指向src
使用import data from '@/data'访问src/data.ts,由于ts与js是两套系统,虽然js能够正常运行,但ts并不知晓'@/data'路径指向哪儿,所以需要在tsconfig.json中也配置路径别名,需要配置compilerOptions.baseUrl与compilerOptions.paths

{
  "compilerOptions": {
    "baseUrl": "./",
    "paths": {
      "@/*":["src/*"]
    },
  }
}

此处地址转换 @/data = ${baseUrl}src/data = ./src/data寻找到了正确地址。

4.3 编辑器配置

使用vscode + volar
volar能够自动按照tsconfig.json配置调用typescript做类型分析,不必将ts运行集成到项目中。也就是说类型系统由volar运行,js由项目本身运行。

5 vue3中api支持 官方文档

接口api工具 json2ts

将json转换成ts

遗留问题

在全局定义中 :declare let a:3
在其他文件中使用: let a = '' 不报错原因:declare let a 解释了一个全局的变量a 他的值是3,在模块文件中可以再次定义,就如fn内部能定义一个外部作用域的变量。当直接使用 a = '' 时出现报错

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/157188.html

(0)

相关推荐

  • 如何进行asmcmd的分析

    技术如何进行asmcmd的分析如何进行asmcmd的分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在ASM实例中,所有的存储于ASM磁盘组中的文件对于操

    攻略 2021年11月30日
  • 问所从来的所,《桃花源记》究竟讲了什么

    技术问所从来的所,《桃花源记》究竟讲了什么《桃花源记》——理想和现实的对白问所从来的所! 《桃花源记》是田园诗人陶渊明写的一篇散文诗般的短文,短文给我们描绘了一个乱世中的天堂——桃花源。这是一个质朴自然化的净土:她宁静和

    生活 2021年10月28日
  • 三点水加心,三点水加个心是什么意思

    技术三点水加心,三点水加个心是什么意思沁读音三点水加心:qin基本字义:1. 渗入;浸润:~润。~人心脾。~凉。
    2. 汲水:“义泉虽至近,盗索不敢~”;
    3. 头向下垂:~着头;
    4. 纳入水中。常用组词:沁凉 qìn

    生活 2021年10月24日
  • Java如何连接COM对象

    技术Java如何连接COM对象这篇文章将为大家详细讲解有关Java如何连接COM对象,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 问题是在CSDN上一网友提出的将 m$ word 转

    攻略 2021年12月9日
  • Python解压可迭代对象赋值给多个变量的示例分析

    技术Python解压可迭代对象赋值给多个变量的示例分析今天就跟大家聊聊有关Python解压可迭代对象赋值给多个变量的示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有

    攻略 2021年12月4日
  • 怎样解析html5

    技术怎样解析html5怎样解析html5,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。HTML(Hype Text Markup Language)超文

    攻略 2021年11月23日