其它
TypeScript 使用 impot 模块化语法
page.ts 文件
import { Header, Content, Footer } from "./components";
export class Page {
constructor() {
new Header();
new Content();
new Footer();
}
}
上面例子编译出来的会变成 AMD 模块结构的代码,不能在浏览器上跑,只能在 Node 环境跑,所以需要 require.js 库来配合
引入 require.js
我这里使用了一个现成的 CDN 的require.js
,地址你可以直接复制,然后用<script>
标签进行引入。
Require.js 的 CDN 地址: https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.js
复制好 URL 地址后,记得使用<script>
标签进行引入,代码如下。
<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.js"></script>
这时候就可以解析define
这样的语法了。然后把page.ts
中加入default
关键字,如果不加是没办法直接引用到的。
import { Header, Content, Footer } from "./components";
export default class Page {
constructor() {
new Header();
new Content();
new Footer();
}
}
这时候再用tsc
进行编译一下,你会发现还是又问题。因为使用export default
这种形式的语法,需要在html
里用require
来进行引入。
require 方式引入
因为你已经加入了require.js
这个库,所以现在可以直接在代码中使用require
了。具体代码如下:
<body>
<script>
require(["page"], function (page) {
new page.default();
});
</script>
</body>
写完这部,刷新页面,可以看到正常显示出来了,虽然用起来比较麻烦,但是我们还是实现了用import
来进行引入,当我们又了webpack
和Parcel
的时候就不会这么麻烦,这些都交给打包工具来处理就好了。
用 Parcel 打包 TypeScript 代码
最通用的有两种解决方案Webpack
和Parcel
。webpack
不用多说,只要是前端基本都会,这几年Parcel
也开始崛起,用的人也越来越多。所以这节课就讲一下,如何使用Parcel
来打包TypeScript
代码。
这里给出新建项目的步骤,如果你已经熟悉此过程,可以跳过。
- 教学需要,这里我们重新建立一个项目
TSTest
,在桌面新建立一个文件夹,然后在VSCode
中打开。 - 打开终端,输入
npm init -y
,创建package.json
文件 - 在终端中输入
tsc --init
,创建tsconfig.json
文件 - 修改
tsconfig.json
配置rootDir
和outDir
. - 新建
src
文件夹,在里边建立index.html
,page.ts
文件 - 编写
index.html
文件,并引入page.ts
文件 - 编写
page.ts
文件。
index.html 文件代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script src="./page.ts"></script>
<title>Document</title>
</head>
<body></body>
</html>
page.ts 文件代码:
const teacher: string = "jspang";
console.log(teacher);
这时候我们并不能正常的预览出效果,我们需要Parcel
的帮忙。
Parcel 可以通过npm
或者yarn
来进行安装,我这里npm
安装很慢,会 5 分钟左右,所以我使用yarn
来进行安装。代码如下。
yarn add --dev parcel@next
使用 yarn 安装大概需要 1 分钟左右,这些主要看你自身的网络情况。
安装好以后,打开package.json
文件,可以看到这样一段代码,我安装的版本是^2.0.0-beta.1
,如果你学习时和这个版本不一样,操作可能会稍有不同。
修改package.json
里边的代码。
{
"scripts": {
"test": "parcel ./src/index.html"
},
}
这个意思就是使用parcel
对index.html
进行一个编译。
然后打开终端输入yarn test
,这时候终端会给出一个地址http://localhost:1234
,把地址放到浏览器上,可以看到浏览器的控制台会输出jspang
。
这说明Parcel
会自动对index.html
中引入的TypeScript
文件进行编译,然后打包好后,就可以直接使用了。
使用Parcel
大大简化了我们的配置过程,如果你想详细学习Parcel
可以自行学习,毕竟我们这个是 TypeScript 的教程,所以更多的 Parcel 知识就不作介绍了。
在 TypeScript 中使用其他 JS 库,以 Jquery 库为例
在src
目录下,引入JQuery
文件,这里采用CDN
的形式进行引入。
BootCDN 地址: https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js
直接在index.html
加入<script>
标签,代码如下:
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
有了 jquery 框架,就可以在TypeScript
文件中进行使用JQuery
的语法了。
然后在page.ts
文件中编写如下代码。
const teacher: string = "jspang";
console.log(teacher);
$(function () {
alert("jspang");
});
写完后到终端中输入yarn test
进行编译和启动服务。然后在地址栏输入了http://localhost:1234
,可以看到程序可以正常输出,也没有任何的报错。
安装 types/jquery(解决方法)
第一种:就是安装别人写好的文件
但是在vscode
中是会报错的,这时候就需要我们安装类型文件type file
,直接可以用 npm 进行安装。
ts -> .d.ts 翻译文件 @types/xxx(库的名字) -> js
npm i @types/jquery
第二种:简单粗暴
还有一种简单粗暴的方法的方式就是直接在page.ts
文件的头部加入这句代码:
declare var $: any;
第三种:自己写一个.d.ts
声明文件的类库
如果你用的类库很少见,就需要自己写了。这个写起来还是很麻烦的。在工作中从来没自己写过,所以也不推荐给大家。比如 JQuery 就有几十个接口,如果你要写,这个文件会写很长,所以原则就是有别人写好的就直接用,实在没有就用粗暴的方法,如果实在不行,再考虑写.d.ts
声明文件。
jquery.d.ts
// Es6 模块化
declare module "jquery" {
interface JqueryInstance {
html: (html: string) => JqueryInstance;
}
// 混合类型
function $(readyFunc: () => void): void;
function $(selector: string): JqueryInstance;
namespace $ {
namespace fn {
class init {}
}
}
export = $;
}
page.ts 引入
import $ from "jquery";
$(function () {
$("body").html("<div>123</div>");
new $.fn.init();
});