TypeScript入门篇(一)
2020/3/2 11:15:59
本文主要是介绍TypeScript入门篇(一),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、还不抓紧学习TS?
- TS是JS的超集,是建立在JS上的一门语言。
- TS可以使用JS之外的扩展语法、面向对象、静态类型。
- TS基础语法 -- 爬虫功能开发 -- TS语法进阶 -- 项目接口开发 -- TS高级语法 -- 项目代码重构 -- 项目前端开发 -- 总结
包含知识点:静态类型、类型注解、类型推断、泛型、类型定义文件、模块化、打包编译、装饰器、Metadata(元数据)、设计模式
二、TS基础语法
1. TS的定义
推荐使用VSCode
编辑器。应为TS
和VSCode
都是微软推出的。VSCode
做了很多对TS
的适配。
参考文档:
定义:TypeScript is a typed superset of JavaScript that compiles to plain JavaScript.
TS是JS的超集,被编译为JS之后才可以运行。TS是静态代码类型。
// ts文件 let a = 123 a = '123' // 不能将类型“"123"”分配给类型“number”。因为其为静态类型,因此不能从number类型变为string类型。 标准写法 let a: number = 123 复制代码
interface Person { name: string } const teacher: Person = { name: 'Fruit Bro' } 复制代码
2. TS的优势
interface Point { x: number, y: number, } function tsDemo (data: Point) { return Math.sqrt(data.x ** 2 + data.y ** 2) } tsDemo({x: 1, y: 2}) 复制代码
优势:
- 开发过程中,发现潜在问题。
- 更友好的编辑器自动提示。
- 代码语义更清晰易懂。
3. TS基础环境搭建
参考文档:
// 安装TS npm install typescript -g tsc demo.ts 就生成了demo.js文件 node demo.js // 运行生成的文件 // 转化工具 简化上述过程 npm install -g ts-node // 运行 ts-node demo.ts 复制代码
4. TS静态类型理解
// count为number类型之后,会具备number类型的所有属性和方法 const count: number = 2020 复制代码
count.
提示的都是number
类型所对应的方法,如下图:
// 自定义类型 interface Point { x: number, y: number, } const point: Point = { x: 1, y: 2 } 复制代码
因此point
变量具备Point
所有的属性和方法。
总结:我们看到一个变量是静态类型,不仅仅意味着这个变量的类型不能修改,还意味这个变量的属性和方法已基本确定。
5. TS基础类型和对象类型
- 基础类型
let count: number = 123 const personName: string = 'style' 复制代码
还有null, undefined, symbol, boolean, void
- 对象类型
const teacher: { name: string, age: number, } = { name: 'fruit', age: 18, } // 数组 const numbers: number[] = [1, 2, 3] // 类 class Person {} const fruit: Person = new Person() // fruit必须是个person类 // function, 返回值为number的函数 const getTotal: () => number = () => { return 123 } 复制代码
6. TS类型注解(type annotation)和类型推断(type inference)
let count: number; 复制代码
如上所示,显式声明变量类型的写法,称为类型注解。
let countInfernce = 123 const firstNumber = 1 const secondNumber = 2 const total = firstNumber + secondNumber 复制代码
在我们写的代码中,变量并没有使用类型注解,但并未报错,就是因为TS进行了类型推断。
如上所示,我们并未定义变量类型,TS会自动的去尝试分析变量的类型,称为类型推断。如果TS会自动分析变量类型,我们就什么都不需要做了。 如果TS无法分析变量类型的话,我们就需要使用类型注释。
function getTotal(firstNumber: number, secondNumber: number) { return firstNumber + secondNumber; } const total = getTotal(1, 2) // 此时就不需要写类型注解了 复制代码
如上所示,此时是需要些类型注解的。
7. 函数相关类型
function add(first: number, second: number): number { // 定义返回类型 return first + second } const total = add(1, 2) // 如果不定义返回类型,如下写法不会报错 function add(first: number, second: number) { // 未定义返回类型 return first + second + '' // 返回字符串 } const total = add(1, 2) 复制代码
function sayHello (): void { // 无返回值void console.log('hello') } 复制代码
// never:这个函数永远不会执行到最后,如下两种情况 function errorEmitter (): never { throw new Error() console.log('123') } function errorEmitter (): never { while(true) {} } 复制代码
解构赋值的类型写法:
情况1: function add({ first, second }: {first: number, second: number}): number { return first + second } const total = add({first: 1, second: 2}) 情况2: function getNumber ({first}: {first: number}) { return first } const count = getNumber({first: 1}) 复制代码
8. TS基础语法
基础类型 boolean、number、string、void、symbol、undefined、null
对象类型 {}、function、[]、class
函数写法1 const func = (str: string): number => { return parseInt(str, 10) } 函数写法2 const func: (str: string) => number = (str) => { return parseInt(str, 10) } 复制代码如上图,提示了函数的类型。 如上图,可以不用写返回值,可以用类型推断。 如上图,自动推断出
Date
类型。
const rawData = '{"name": "fruit"}' const newData = JSON.parse(rawData) // JSON.parse返回的内容并不能帮助TS推断newData的类型 复制代码
如下图,newData为any
因此可以改为如下写法:interface Person { name: string } const rawData = '{"name": "fruit"}' const newData: Person = JSON.parse(rawData) 复制代码
更多类型
let temp: number | string = 123 // temp变量有可能为number或string temp = '456' 复制代码
这篇关于TypeScript入门篇(一)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-29Elasticsearch慢查询日志配置
- 2024-05-29揭秘华为如此多成功项目的产品关键——Charter模板
- 2024-05-29海外IDC业务拓展的7大挑战
- 2024-05-29InLine Chat功能优化对标Github Copilot,CodeGeeX带来更高效、更直观的编程体验!
- 2024-05-29CodeGeeX 智能编程助手 6 项功能升级,在Visual Studio插件市场霸榜2周!
- 2024-05-29AutoMQ 生态集成 Apache Doris
- 2024-05-292024年IDC行业的深度挖掘:机遇、挑战与未来展望
- 2024-05-29五款扩展组件齐发 —— Volcano、Keda、Crane-scheduler 等,邀你体验
- 2024-05-29AutoMQ 对象存储数据高效组织的秘密: Compaction
- 2024-05-29活动预告|来 GIAC 大会听大数据降本利器:AutoMQ 基于云原生重新设计的 Kafka