前言

TypeScript是JavaScript类型的超集,它可以编译成纯JavaScript,简称ts。相对于ES6,TypeScript最大的改善是增加了类型系统,国内外很多大型工程都用它,如AngularJs,白鹭引擎、Antd。

下面我将在React&Webpack代码库下基础下搭建TypeScript开发环境。

安装

第一步 安装React相关包的声明文件

可直接安装npm包,一般包前面加@types,就是加载该包的声明文件以.d.ts结尾

 npm install --save @types/react @types/react-dom @types/react-router-dom @types/react-redux

或 安装typings包进行搜索安装

 # Install Typings CLI utility. 
 npm install typings --global
 
 # Search for definitions. 
 typings search react
 
 typings install react --save

第二步 安装Webpack对应的加载器loader

awesome-typescript-loader是typescript官网推荐的loader,ts-loader是wepack官网推荐的loader,两者用法一样都可用,但是要注意版本。

  # 安装Ts
  npm install typescript --save-dev
  # 安装Webpack的ts loader
  npm install awesome-typescript-loader --save-dev
  npm install ts-loader --save-dev
  # 安装源文件,方便调试
  npm install source-map-loader --save-dev

提示

如果你的webpack版本是^4.0.0,则安装 awesome-typescript-loader的^5.0.0版本, 或ts-loader的^3.5.0版本

如果你的webpack版本是^3.0.0,则安装 awesome-typescript-loader的^4.0.0版本, 或ts-loader的^4.3.0版本

第三步 修改Webpack配置文件

module.exports = {

    resolve: {
        // Add '.ts' and '.tsx' as resolvable extensions.
        extensions: ['.web.js', '.mjs', '.js', '.json', '.web.jsx', '.jsx',".ts", ".tsx"],
    },

    module: {
        rules: [
            // All files with a '.ts' or '.tsx' extension will be handled by 'awesome-typescript-loader'.
            // { test: /\.tsx?$/, loader: "awesome-typescript-loader" },
            { test: /\.tsx?$/, loader: "ts-loader" },

            // All output '.js' files will have any sourcemaps re-processed by 'source-map-loader'.
            { enforce: "pre", test: /\.js$/, loader: "source-map-loader" }
        ]
    }
};

第四步 新建Ts配置文件

新建tsconfig.json,

{
  "compilerOptions": {
    "outDir": "./ts/",
    "sourceMap": true,
    "noImplicitAny": true,
    "target": "es6",
    "jsx": "react",
    "allowJs": true,
    "moduleResolution":"node"
  },
  "include": [
    "./src/**/*"
  ],
  "exclude": [
    "node_modules"
  ],
  "files": [
    "./node_modules/immutable/dist/immutable.d.ts"
  ]
}
  • outDir:输出文件夹路径
  • sourceMap:是否要源码;
  • noImplicitAny:是否警告any类型
  • target:编译目标语法
  • allowJs:允许所有js文件可编译
  • moduleResolution:模块解析策略
  • include:ts存放目录
  • exclude:编译排除目录
  • file:ts文件,编译包含’include’和’file’指定的文件。

下面可以尽情编写TS文件了


import * as React from "React";
import Baseinfo from "./baseinfo/baseinfo";
import { Switch, Route,Link } from 'react-router-dom';
import {is, fromJS} from 'immutable';


export interface Props { match: {url:string}}


export class ConvertBean extends React.Component<Props, {}> {
    constructor(props:Props) {
        super(props);

    }

    shouldComponentUpdate(nextProps:any, nextState:any) {
        return !is(fromJS(this.props), fromJS(nextProps)) || !is(fromJS(this.state),fromJS(nextState))
    }

    render() {
        const { match } = this.props;
        return (
            <div className="toast-wrapper">
                <Link to={`${match.url}/baseinfo`}>baseinfo</Link>
                <Switch>
                    <Route path={`${match.url}/baseinfo`} component={Baseinfo}/>
                </Switch>
            </div>
        );
    }
}

Happy coding .. :)

Comments评论



也可直接在issue下评论 https://github.com/raoenhui/raoenhui.github.io/issues