关于 TypeScript 是什么,应该大部分人都已经知道,其 官网 的定义以下:javascript
TypeScript is a typed superset of JavaScript that compiles to plain JavaScript. Any browser. Any host. Any OS. Open source.css
翻译成中文便是:html
TypeScript 是 JavaScript 的类型的超集,它能够编译成纯 JavaScript。编译出来的 JavaScript 能够运行在任何浏览器上。TypeScript 编译工具能够运行在任何服务器和任何系统上。TypeScript 是开源的。前端
拆分一下关键词简单通俗的理解以下:vue
先来看一组数据:java
TypeScript 月下载量node
数据来源:npm 包下载量react
Developer Survey Results 2018git
数据来源:stackoverflowes6
TypeScript's Popularity Over Time
数据来源:StateOfJs 2018
从上面的数据来看,TypeScript 毫无疑问是当下很是受喜好的编程语言。经过上述 TypeScript 的定义,咱们知道 TypeScript 的核心是基于 JavaScript 弱类型 的特性提供了 静态类型系统。JavaScript 是一门弱类型语言,变量的数据类型具备动态性,能够被改变,只有在执行时才能肯定变量的类型,这意味着有些错误只有在运行时才会发生。而 TypeScript 提供的类型机制则能够在编译时有效的解决这类问题,在编译时就暴露问题;同时基于类型定义加上 IDE 的智能提示,在开发和阅读代码时会很是的方便。在选择使用 TypeScript 时,你能够享受它带来的如下特性:
不管是框架仍是技术的演进,事物每每都存在两面性,在无限接近好的一方面,也会有瑕疵的一方面,TypeScript 解决 JavaScript 弱类型问题的同时,也引入自身的一些复杂度;从学习成原本讲,须要理解诸如 Generics(泛型)、Interfaces(接口)、Enums(枚举) 等概念;从开发效率上来说,在前期开发阶段须要多写一些类型定义代码,须要必定的适应期,但从长期可维护性来看这些多的开发时间是值得的;从工具上来看,工欲善其事必先利其器,须要了解周边的工具生态系统,固然这些也算不上缺点。
.jsx
替换成 .tsx
Adding TypeScript# Before
npm i react @types/react -S
=>
# After
npm i react -S
复制代码
经过 TypeScript 写 React 组件,主要区别就是 Props 和 State 的定义,以下两种写法:
import React from 'react';
class App extends React.PureComponent {
state = {
name: 'ice',
age: 1,
};
render() {}
}
App.propTypes = {
name: PropTypes.string.isRequired,
age: PropTypes.number.isRequired,
};
复制代码
import * as React from 'react';
interface IProps {
name: string;
age: number;
}
interface IState {
name: string;
age: number;
}
class App extends React.PureComponent<IProps, IState> {
state = {
name: 'ice',
age: 1,
};
render() {}
}
复制代码
近两年来 TypeScript 在前端社区的发展愈来愈火热,也有愈来愈多的应用采用 TypeScript 编写,与此同时,飞冰(ICE)也在积极的拥抱 TypeScript 社区。ICE 提供了基于 TypeScript 的基础模板,该模板将飞冰(ICE)自己的能力和 TypeScript 能力作了很好的融合:
.tsx
或者
.ts
结尾的文件都支持其语法。
迁移步骤以下:
# ice-scripts 最新版支持 TypeScript 的语法构建
$ npm update ice-script
复制代码
$ npm install typescript -D
复制代码
{
"compileOnSave": false,
"buildOnSave": false,
"compilerOptions": {
"outDir": "build", // 指定输出目录
"module": "esnext", // 指定使用模块: 'commonjs', 'amd', 'system', 'umd' or 'es2015'
"target": "es6", // 指定 ECMAScript 目标版本: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', or 'ESNEXT'
"jsx": "react", // 容许编译 javascript 文件
"moduleResolution": "node", // 选择模块解析策略
"allowSyntheticDefaultImports": true,
"lib": ["es6", "dom"],
"sourceMap": true, // 生成相应的 '.map' 文件
"allowJs": true, // 扩展名能够是 .js/.jsx
"noUnusedLocals": true // 有未使用的变量时,抛出错误
},
"include": ["src/*"], // 须要编译的文件目录
"exclude": ["node_modules", "build", "public"] // 排除编译的文件目录
}
复制代码
在 TypeScript 工程中推荐使用 .tsx
替代 .jsx
、使用 .ts
替代 .js
,这里能够根据自身需求按需更改,通常状况下更改后缀以后须要修改部分语法,不然 ts 语法检测可能会不经过。
若是将 src/index.js
的后缀作了修改,那么同步须要修改 package.json
里的 entry 字段:
// packgae.json
buildConfig: {
- entry: './src/index.js'
+ entry: './src/index.ts'
}
复制代码
按照以上步骤,可按需迁移项目到 TypeScript 工程。若有疑问,请经过飞冰钉钉群联系咱们。