js require和import区别与应用

本文探讨了在使用TypeScript时如何导入JavaScript文件的报错问题,比较了import与require的区别,解释了它们的工作原理,并强调了import在开发中的优势,如实时错误检查和编译时自动更新。

最近遇到一个有意思的问题,是ts文件引入js文件的报错问题

在room文件下我写了index.tsx和test.js两个文件,这里test.js中只写了一个测试用的对象(test.js文件中只有一个对象Bear,相当于一个保存对象的文件),之后我在index.tsx中进行import引用,就会报错

无法找到模块“./test.js”的声明文件。“c:/code/Dazeka-front/src/pages/room/test.js”隐式拥有 "any" 类型。

上网查了一下,说是要改成require

就不报错了,问题是解决了,但是为什么呢?

我们首先需要区分一下import和require的区别,总结一下就是

import:编译时就加载

require: 运行时再加载

所以,我们刚刚用

import { Bear } from './test.js'

用import的话,编译器马上就会去找这个test文件中的"Bear"这个变量(无论这个是个普通的变量还是一个函数名),但是因为我们的test是js文件,就算是正常export了,ts也不能识别,就报错了

需要注意的是,import是查找的对应的单个方法或者属性,所以才会在“{}”中定义要导出的变量名

我们之后用

const { Bear } = require('./test')

其实是用的一个取巧的方法,因为require首先编译时是不会报错的,所以就算把文件名输错也没关系,而且,require是直接将test的整个对象给引用了,那么这个对象无论是js写的还是ts写的,因为是引用的对象,所以不会报错

但是,我们在实际开发中尽量还是用import,最主要的一个原因是import会实时报错,现在主流编译器也会有import的插件,在我们更改了一些被引用文件的名称或者路径后,编译器可以自动帮我们更改import;还有一点就是import更符合我们的开发规范,因为import的变量是无法重新赋值的,这也会防止我们对外部方法或者常量进行一些非法赋值

最后import比较好用的一点就是export中的数据变化后,在其他地方import读取,会读取到更改后的信息,这广泛地用到了前端的state和props传值中

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值