19年ts一定大火, 请大家放心学ts吧
typescript工作原理
通过typescript命令行工具, 把typescript转成javascript, 从而支持在浏览器运行.
typescript特性
ts和js最大的区别就是ts多了类型注解功能, 通过名字中的”type“也能看出语言的重点在”类型“上. 这个类型分为基础类型和高级类型, 高级类型就是通过基础类型组成的自定义类型.
基础类型
ts中包含了boolean / number / string / object / 数组(数组的表示有多种, 后续文章会展开) / 元组 / 枚举 / any / Undefined / Null / Void / Never
高级类型
大部分情况是对object类型做更细的标注, 此处不多讲, 先放个例子了解即可, 知道关键词interface即可, 中文名”接口“, 后续章节会展开.
interface Article {
title: string;
count: number;
content: string;
tags: string[]; // 数组里的元素都是字符串
}
动手开始, 安装
开始写代码
生成js
- 建立一个文件夹, 在里面新建一个hello.ts文件, 注意扩展名是ts.
- 用vscode打开hello.ts文件.
- 输入如下代码, 让我们体验下ts:
interface A {
a:number,
b:string
}
let obj:A = {a:123,b:'456'};
命令行进入文件夹, 执行命令
npx tsc hello.ts
好了我们可以看下文件内部多了一个hello.js, 打开看看:
var obj = { a: 123, b: '456' };
代码中的”类型注解“不见了 ,我们的ts被编译成js了, 是不是很神奇.
any类型
any代表任意类型, 这个类型特别适合ts新手, 初期有些类型不知道如何表达, 我们就可以暂时使用any表达, 等熟练ts后再标注精准的类型.
let n:any;
联合类型
let n:string|number
补充配置文件—tsconfig.json
tsconfig.json放在你项目的根目录即可:
// tsconfig.json
{
"compilerOptions": {
// 不报告执行不到的代码错误。
"allowUnreachableCode": true,
// 必须标注为null类型,才可以赋值为null
"strictNullChecks": true,
// 严格模式, 强烈建议开启
"strict": true,
// 支持别名导入:
// import * as React from "react"
"esModuleInterop": true,
// 目标js的版本
"target": "es5",
// 目标代码的模块结构版本
"module": "es6",
// 在表达式和声明上有隐含的 any类型时报错。
"noImplicitAny": true,
// 删除注释
"removeComments": true,
// 保留 const和 enum声明
"preserveConstEnums": false,
// 生成sourceMap
"sourceMap": true,
// 目标文件所在路径
"outDir": "./lib",
// 编译过程中需要引入的库文件的列表
"lib": [
"dom",
"es7"
],
// 额外支持解构/forof等功能
"downlevelIteration": true,
// 是否生成声明文件
"declaration": true,
// 声明文件路径
"declarationDir": "./lib",
// 此处设置为node,才能解析import xx from 'xx'
"moduleResolution": "node"
},
// 入口文件
"include": [
"src/main.ts"
],
//排除的文件
"exclude": [
"test.ts",
"**/*.spec.ts",
"app/pages/company-details/outline/outline.*"
]
}