简介
TypeScript是一种由微软开发的开源、跨平台的编程语言。它是JavaScript的超集,最终会被编译为JavaScript代码。
2012年10月,微软发布了首个公开版本的TypeScript,2013年6月19日,在经历了一个预览版之后微软正式发布了正式版TypeScript
TypeScript 是 JavaScript 的一个超集,主要提供了类型系统和对 ES6+ 的支持,它由 Microsoft 开发,代码开源于 GitHub (opens new window)上
特点
TypeScript 主要有 3 大特点:
- 始于JavaScript,归于JavaScript
TypeScript 可以编译出纯净、 简洁的 JavaScript 代码,并且可以运行在任何浏览器上、Node.js 环境中和任何支持 ECMAScript 3(或更高版本)的JavaScript 引擎中。
- 强大的类型系统
类型系统允许 JavaScript 开发者在开发 JavaScript 应用程序时使用高效的开发工具和常用操作比如静态检查和代码重构。
- 先进的 JavaScript
TypeScript 提供最新的和不断发展的 JavaScript 特性,包括那些来自 2015 年的 ECMAScript 和未来的提案中的特性,比如异步功能和 Decorators,以帮助建立健壮的组件。
安装
# 安装
npm install -g typescript
#or
yarn add -D typescript
# 检查版本
tsc -V
编译方式
手动编译
手动编译ts代码
tsc helloworld.ts
编译完成后自动产生一个 helloworld.js 文件,在html文件内引入即可
ts文件内如果直接写js代码,在html文件中直接引入ts文件,在谷歌的浏览器是可以直接使用的
ts文件中有ts的代码,就需要把这个ts文件编译成js文件,在html内直接引入js文件
ts文件内二点函数的形参使用了类型进行修饰,那么最终在编译js文件的时候是没有这个类型的
ts文件中的变量使用的是let类型修饰,编辑js文件中的修饰符就变成var了
vscode自动编译
1). 生成配置文件tsconfig.json
tsc --init
2). 修改tsconfig.json配置
"outDir": "./js",
"strict": false,
3). 启动监视任务:
终端 -> 运行任务 -> 监视tsconfig.json
类型注解
给 person
函数的参数添加 : string
类型注解,如下:
function greeter (person: string) {
return 'Hello, ' + person
}
let user = 'Yee'
console.log(greeter(user))
添加了string后,参数person必须是字符串类型的数据,才能传递进去。
接口
接口:是一种能力,一种约束
(() => {
// 定义一个接口
interface IPerson {
firstName: String,
lastName: String
}
function showFullName(person: IPerson) {
return person.firstName + "_" + person.lastName
}
const person = {
firstName: '张',
lastName: '三'
}
console.log("hsohoshhfphp", showFullName(person))
})()
接口等于对传入参数的格式限制,在传入person的时候,person的格式需要满足IPerson的格式,否则会报错。
类
在ts内使用js的类,作为构造函数
// ts内使用js内的类
(() => {
interface IPerson {
firstName: string,
lastName: string,
}
// 定义一个类型
class Person {
// 定义公众字段/属性
firstName: string
lastName: string
fullName: string
// 定义一个构造器函数
constructor(firstName: string, lastName: string) {
// 更新属性
this.firstName = firstName
this.lastName = lastName
this.fullName = this.firstName + "_" + this.lastName
}
}
// 定义函数
function showFullName(person: IPerson) {
return person.firstName + "_" + person.lastName
}
// 实例化对象
const person = new Person("李", "四")
console.log("类", showFullName(person))
})()
在运行的时候,可以看到ts内的类只是一个语法糖,本质上还是js函数的实现。
使用webpack打包TS(还需看看还需看看)
使用webpack打包ts,需要下下载依赖:
yarn add -D typescript
yarn add -D webpack webpack-cli
yarn add -D webpack-dev-server
yarn add -D html-webpack-plugin clean-webpack-plugin
yarn add -D ts-loader
yarn add -D cross-env
入口JS: src/main.ts
// import './01_helloworld'
document.write('Hello Webpack TS!')
index页面: public/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>webpack & TS</title>
</head>
<body>
</body>
</html>
build/webpack.config.js
const {CleanWebpackPlugin} = require('clean-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const path = require('path')
const isProd = process.env.NODE_ENV === 'production' // 是否生产环境
function resolve (dir) {
return path.resolve(__dirname, '..', dir)
}
module.exports = {
mode: isProd ? 'production' : 'development',
entry: {
app: './src/main.ts'
},
output: {
path: resolve('dist'),
filename: '[name].[contenthash:8].js'
},
module: {
rules: [
{
test: /\.tsx?$/,
use: 'ts-loader',
include: [resolve('src')]
}
]
},
plugins: [
new CleanWebpackPlugin({
}),
new HtmlWebpackPlugin({
template: './public/index.html'
})
],
resolve: {
extensions: ['.ts', '.tsx', '.js']
},
devtool: isProd ? 'cheap-module-source-map' : 'cheap-module-eval-source-map',
devServer: {
host: 'localhost', // 主机名
stats: 'errors-only', // 打包日志输出输出错误信息
port: 8081,
open: true
},
}
配置打包命令
"dev": "cross-env NODE_ENV=development webpack-dev-server --config build/webpack.config.js",
"build": "cross-env NODE_ENV=production webpack --config build/webpack.config.js"
运行与打包
yarn dev
yarn build