1. typescript使得js在书写的过程中有了参数类型的限制在 传参的过程中变得严格,减少了不必要的错误的发生

2. tslint同时也兼备了一部分eslint的作用,在一定程度上我们使用tslint可以取代eslint

3. 使用typescript的初期经常会在为了不报错而书写代码,其实这是习惯上的问题,主动的去接受typescript的约束,养成书写严格的代码的习惯就可以很快适应并且感触到ts的好处。

4. 以下只是入门级别的一些方法,ts有很多概念需要去记住

配置

前端项目开发目前一般都是webpack + babel这样的方式去进行的,除此之外还有gulp,gulp和webpack相似的一点是他们都是基于传递文件流的方式,

react项目中的使用

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

需要安装@types/react和@types/react-dom

开发时依赖

npm install --save-dev typescript awesome-typescript-loader source-map-loader

awesom-typescript-loader是用来编译tsconfig,.json的 source-map-loader是用来生成ts的sourcemap文件的

项目根目录下新建一个tsconfig.json文件,如下这种

{
"compilerOptions": {
"outDir": "./dist/",
"sourceMap": true,
"noImplicitAny": true,
"module": "commonjs",
"target": "es5",
"jsx": "react"
},
"include": [
"./src/**/*"
]
}

可以使得规则被webpack awesom-typescript-loader的加载得以运用在项目中

以下是一个配置示例,这里变的注释很重要,注释很重要,注释很重要。

module.exports = {
entry: "./src/index.tsx",
output: {
filename: "bundle.js",
path: __dirname + "/dist"
}, // Enable sourcemaps for debugging webpack's output.
devtool: "source-map", resolve: {
// Add '.ts' and '.tsx' as resolvable extensions.
extensions: [".ts", ".tsx", ".js", ".json"]
}, module: {
rules: [
// All files with a '.ts' or '.tsx' extension will be handled by 'awesome-typescript-loader'.
{ test: /\.tsx?$/, loader: "awesome-typescript-loader" }, // All output '.js' files will have any sourcemaps re-processed by 'source-map-loader'.
{ enforce: "pre", test: /\.js$/, loader: "source-map-loader" }
]
}, // When importing a module whose path matches one of the following, just
// assume a corresponding global variable exists and use that instead.
// This is important because it allows us to avoid bundling all of our
// dependencies, which allows browsers to cache those libraries between builds.
externals: {
"react": "React",
"react-dom": "ReactDOM"
},
};

使用

最简单的用法,在函数的参数中定义属性的类型,可以定义string number boolean这些基本类型

function greeter(person: string) {
return "Hello, " + person;
} let user = "Jane User"; document.body.innerHTML = greeter(user);

那如果参数是对象或者数组呢,这时候ts引入了一个新的概念叫做interface,我们可以声明一个interface 然后作为参数类型

interface Person {
firstName: string;
lastName: string;
} function greeter(person: Person) {
return "Hello, " + person.firstName + " " + person.lastName;
} let user = { firstName: "Jane", lastName: "User" }; document.body.innerHTML = greeter(user);

复杂类型的定义

let subAccountTableColumns: Array<{ title: string; dataIndex: string, align?: string }> = [
{ title: '账户名称', dataIndex: 'name', align: 'center' },
{ title: '绑定邮箱', dataIndex: 'email' },
{ title: '状态', dataIndex: 'status', align: 'center' },
{
title: '标准授权',
dataIndex: 'standardAuthorization',
align: 'center'
},
{
title: '扩张授权',
dataIndex: 'extendedAuthorization',
align: 'center'
},
{ title: '备注', dataIndex: 'note', align: 'center' },
{ title: '操作', dataIndex: 'action', align: 'center' }
]

1. 如果需要定义可选的参数需要用 ?: 表示这个参数是可选的

2. 如果需要定义复杂的数组可以用Array<>这种写法

函数返回值

假如我们放一个函数作为参数的时候,那么需要定义函数的返回值,

function identity(arg: number): number {
return arg;
}

书写方法 

在书写ts的时候会有一些疑虑

1. 分隔符 以下的三种写法其实都是可以的, 那应该用那一种呢

interface Person {
firstName: string,
lastName: string
}
interface Person {
firstName: string
lastName: string
}
interface Person {
firstName: string;
lastName: string;
}

当然是都可以的咯,但是在同行的情况下就需要用分隔符了,那么选择用那种方式,项目统一一下就好了

2. 对象和类型

let a: String = 'test'
let b: string = 'test'

基于js的一切都是对象的说法,第一种和第二种在ts里是等价的

但推荐用第二种,因为基本类型是构成约束的本质,而String不是基本类型,虽然它同样具有约束基本类型的能力

其次在ts里只有string, boolean, number, any这些可以小写的类型

typescript使用小结的更多相关文章

  1. TypeScript学习小结

    TypeScript是什么 TypeScript是由微软公司开发的一个开源JavaScript的超集,主要提供了类型系统和对ES6的支持,可以编译成纯JavaScript,主要就是对JavaScrip ...

  2. 【react】使用 create-react-app 构建基于TypeScript的React前端架构----上

    写在前面 一直在探寻,那优雅的美:一直在探寻,那精湛的技巧:一直在探寻,那简单又直白,优雅而美丽的代码. ------ 但是在JavaScript的动态类型.有时尴尬的自动类型转换,以及 “0 == ...

  3. React + TypeScript + Taro前端开发小结

    前言 项目到一段落,先来记录一下,本文以前端新手的角度记录React.TypeScript.Taro相关技术的开发体验以及遇到的问题和解决方法. 之前总说要学React(这篇博客:代码使我头疼之Rea ...

  4. 前端入门25-福音 TypeScript

    声明 本篇内容摘抄自以下来源: TypeScript 中文网 只梳理其中部分知识点,更多更详细内容参考官网. 正文-TypeScript 今天来讲讲有 Java 基础转 JavaScript 的福音: ...

  5. TypeScript体系调研报告

    作者简介:aoto 蚂蚁金服·数据体验技术团队 Q:为什么要写这边文章?这篇文章要表达什么? A:我们考虑在SPA应用中使用TS作为开发语言,我们需要一篇系统性介绍TS本身及周边的文章来论证在项目中使 ...

  6. 在WisOne平台上学习TypeScript

    TypeScript是微软公司推出的开源的类型化脚本语言,目的是用于为弱类型的javaScript提供强类型的识别和感知功能,同时它提供了类.接口.继承等相关在javaScript中不容易实现的功能, ...

  7. 如何编写 Typescript 声明文件

    使用TypeScript已经有了一段时间,这的确是一个好东西,虽说在使用的过程中也发现了一些bug,不过都是些小问题,所以整体体验还是很不错的. TypeScript之所以叫Type,和它的强类型是分 ...

  8. 使用 TypeScript 改造构建工具及测试用例

    最近的一段时间一直在搞TypeScript,一个巨硬出品.赋予JavaScript语言静态类型和编译的语言. 第一个完全使用TypeScript重构的纯Node.js项目已经上线并稳定运行了. 第二个 ...

  9. TypeScript在react项目中的实践

    前段时间有写过一个TypeScript在node项目中的实践. 在里边有解释了为什么要使用TS,以及在Node中的一个项目结构是怎样的. 但是那仅仅是一个纯接口项目,碰巧赶上近期的另一个项目重构也由我 ...

随机推荐

  1. react 实现类似vue中的<keep-alive>的功能,并解决antd-mobile切换回来时的空白

    在移动端的spa页面中,只要使用到了路由就很有必要使用到状态保存的功能,这样才能保证在页面进行切换的时候,让用户可以看到刚才滑动的地方,让用户的体验更加友好.这儿我找到了react-router-ca ...

  2. 强连通图缩点——cf999E

    问题转换成缩点求度数为0的点的个数,s点所在联通块作额外处理 缩点写的很烂调了一早上.. #include<bits/stdc++.h> #include<vector> us ...

  3. python相关软件安装流程图解——虚拟机安装——CentOS-7-x86_64-DVD-1810——CentOS-01下载——CentOS-02安装——CentOS-03配置操作

    http://www.xitongzhijia.net/soft/24315.html http://www.downxia.com/downinfo/4574.html     .

  4. System.Web.Mvc.JavaScriptResult.cs

    ylbtech-System.Web.Mvc.JavaScriptResult.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, P ...

  5. spss logistic回归分析结果如何分析

    spss logistic回归分析结果如何分析 如何用spss17.0进行二元和多元logistic回归分析 一.二元logistic回归分析 二元logistic回归分析的前提为因变量是可以转化为0 ...

  6. 2_1.springboot2.x配置之配置文件解析

    1.配置文件 1.Spring Boot使用一个全局的配置文件:•application.properties.application.yml 2.配置文件放在src/main/resources目录 ...

  7. P1280 尼克的任务 /// DP(选择性地)

    题目大意: https://www.luogu.org/problemnew/show/P1280 题解 手推一遍思路更清晰 #include <bits/stdc++.h> using ...

  8. jsp 引入js、css修改后有缓存不及时更新

    解决:(增加随机版本号) <link rel="stylesheet" type="text/css" href="css/1.css?v=&l ...

  9. Redis理解和使用

    摘抄并用于自查笔记 1. Redis简介 我们日常Java Web开发,一般使用数据库进行存储,在数据量较大的情况下,单一使用数据库保存数据的系统会因为面向磁盘,磁盘读写速度比较慢而存在严重的性能弊端 ...

  10. [记]Cordova安装插件选择插件版本

    在项目中可以使用 cordova plugin add [PLUGIN_ID] 這个命令安装一个cordova插件,这个命令好像是安装插件的最新版本.当需要通过cordova下载这个插件一个特定的版本 ...