TypeScript一

简介: JavaScript开发迅速但维护成本高,适合小型项目,因其动态类型导致编辑器提示不全。TypeScript是JS超集,增加了类型系统,提高开发效率和代码质量。安装TypeScript需先安装Node.js,然后通过npm安装tsc。案例演示创建`.ts`文件,转换成`.js`并运行。TypeScript支持多种数据类型,如any、number、string等,并有严格变量声明和函数定义规则,包括函数重载和匿名函数。

在学习ts之前,先聊一下js,js开发起来快,但是维护起来的成本会高,不适合开发大型的项目,js中没有变量类型,例如let a = 10,10是num,但是a是没有变量类型的,它只是一个局部变量,想存什么,存什么,你在其他地方又把a赋值了一个字符串,但是到头来你想拿a去做运算,那么这个时候就会发生隐患事故了,js不报错。js中定义函数,函数的参数也是没有类型,参数做运算,这个时候就会发生错误了,js是一个动态类型,无论是webstorm 还是vscode,它的提示都不是很完善,因为编辑器不知道它的变量类型。那么js是怎么来的呢,是微软和网景两大公司大战时,网景公司为了开发出的我有你没有的商业份额,天下武功唯快不破,因此js十天左右诞生了,微软公司近几年干的好事就是开发出来了vscode免费供开发者使用,开发出ts更加灵活使用,还有放弃了IE内核转而拥抱了chorm内核
TS并不是取代js,而是在javascirpt为基础构建的语言,即是js的超集,什么是超集,就是js有的,ts也有,但是ts在js的基础上又添加了其他

学习TypeScript先从安装开始
@[toc]

一、安装

  • 先安装nodejs:https://nodejs.org/dist/v14.15.1-x64.msi
  • 更换npm源:npm config set registry https://registry.npmmirror.com
  • 安装 typescript:npm install -g typescript
  • 安装完成后我们可以使用 tsc 命令来执行 TypeScript 的相关代码,以下是查看版本号:$ tsc -v

    二、案例切入

  1. 新建一个 app.ts 的文件,代码如下:
var message:string = "Hello World" 
console.log(message)

通常我们使用 .ts 作为 TypeScript 代码文件的扩展名。

  1. 转换为js
    然后执行以下命令将 TypeScript 转换为 JavaScript 代码:
tsc app.ts
  1. 执行编译
    使用 node 命令来执行 app.js 文件:
$ node app.js

在这里插入图片描述
在这里插入图片描述

三、语法

1、数据类型

数据类型 描述
任意类型 any 声明为 any 的变量可以赋予任意类型的值。
数字类型 number let binaryLiteral: number = 0b1010; // 二进制 let octalLiteral: number = 0o744; // 八进制 let decLiteral: number = 6; // 十进制let hexLiteral: number = 0xf00d; // 十六进制
字符串类型 string let words: string = `您好,今年是 ${ name } 发布 ${ years + 1} 周年`;
布尔类型 boolean let flag: boolean = true;
数组类型 let arr: number[] = [1, 2];// 在元素类型后面加上[]
元组 元组类型用来表示已知元素数量和类型的数组,各元素的类型不必相同,对应位置的类型需要相同。let x: [string, number]; x = ['Runoob', 1]; // 运行正常 x = [1, 'Runoob']; // 报错
枚举 enum enum Color {Red, Green, Blue}; let c: Color = Color.Blue; console.log(c); // 输出 2
void function hello(): void {alert("Hello Runoob");}
null 表示对象值缺失
undefined 用于初始化变量为一个未定义的值
never never 是其他类型(包括 null 和 undefined)的子类型,代表从不会出现的值

==注意==:TypeScript 和 JavaScript 没有整数类型。

2、变量声明

TypeScript 变量的命名规则:

  • 变量名称可以包含数字和字母。

  • 除了下划线 _ 和美元 $ 符号外,不能包含其他特殊字符,包括空格。

  • 变量名不能以数字开头。

  1. 声明变量的类型及初始值:var [变量名] : [类型] = 值;
var uname:string = "Runoob";
  1. 声明变量的类型,但没有初始值,变量值会设置为 undefined:var [变量名] : [类型];
var uname:string;
  1. 声明变量并初始值,但不设置类型,该变量可以是任意类型:var [变量名] = 值;
var uname = "Runoob";
  1. 声明变量没有设置类型和初始值,类型可以是任意类型,默认初始值为 undefined:var [变量名];
var uname;

3、函数定义

3.1、函数定义

可选参数使用问号标识 ?

```javascript
function buildName(firstName: string, lastName?: string) {
if (lastName)
return firstName + " " + lastName;
else
return firstName;
}

let result1 = buildName("Bob"); // 正确
let result2 = buildName("Bob", "Adams", "Sr."); // 错误,参数太多了
let result3 = buildName("Bob", "Adams"); // 正确


### 3.2、匿名函数

```javascript
var res = function(a:number,b:number) { 
    return a*b;  
}; 
console.log(res(12,2))

3.3、匿名函数自调用

(function () {
   
    
    var x = "Hello!!";   
    console.log(x)     
 })()

3.4、构造函数

var myFunction = new Function("a", "b", "return a * b"); 
var x = myFunction(4, 3); 
console.log(x);

3.5、递归函数

通俗理解:从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?"从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?'从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?……'"

function factorial(number) {
   
   
    if (number <= 0) {
   
            // 停止执行
        return 1; 
    } else {
   
        
        return (number * factorial(number - 1));     // 调用自身
    } 
}; 
console.log(factorial(6));      // 输出 720

3.6、Lambda 函数

var foo = (x:number)=>10 + x 
console.log(foo(100))      //输出结果为 110

3.7、函数重载

重载是方法名字相同,而参数不同,返回类型可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。

function disp(s1:string):void; 
function disp(n1:number,s1:string):void; 

function disp(x:any,y?:any):void {
   
    
    console.log(x); 
    console.log(y); 
} 
disp("abc") 
disp(1,"xyz");
相关文章
|
8月前
|
监控 JavaScript 前端开发
ry-vue-flowable-xg:震撼来袭!这款基于 Vue 和 Flowable 的企业级工程项目管理项目,你绝不能错过
基于 Vue 和 Flowable 的企业级工程项目管理平台,免费开源且高度定制化。它覆盖投标管理、进度控制、财务核算等全流程需求,提供流程设计、部署、监控和任务管理等功能,适用于企业办公、生产制造、金融服务等多个场景,助力企业提升效率与竞争力。
489 12
|
SQL 存储 监控
串口调试助手连接SQL数据库的技巧与方法
串口调试助手是电子工程师和软件开发人员常用的工具,它能够帮助用户进行串口通信的调试和数据分析
|
缓存 前端开发 Java
在Java项目中实现跨域资源共享(CORS)
在Java项目中实现跨域资源共享(CORS)
|
C语言 Perl
西门子S7-1200编程实例,电动机起保停控制梯形图如何编写?
本篇我们通过一个电动机起保停控制的实例,介绍S7-1200的使用方法,按下瞬时启动按钮I0.6,电动机Q0.0启动,按下瞬时停止按钮I0.7,电动机Q0.0停止。
西门子S7-1200编程实例,电动机起保停控制梯形图如何编写?
|
存储 安全 数据管理
新一代数据库技术:融合区块链的分布式存储系统
传统数据库技术在面对日益增长的数据量和复杂的数据管理需求时显现出局限性。本文介绍了一种新一代数据库技术:融合区块链的分布式存储系统。通过将区块链技术与传统数据库相结合,实现了数据的分布式存储、安全性和透明度,以及去中心化的特性。这一技术的应用将极大地推动数据库系统的发展,为数据管理带来全新的解决方案。
|
存储 Kubernetes 调度
关于Pod的基础知识概览
【6月更文挑战第19天】Pod是Kubernetes的基本执行单元,是最小部署和管理的粒度,包含一个或多个共享网络和存储的容器,常比喻为豆荚中的豆子。Pod中的容器共享IP和端口,便于协作,支持Docker等容器运行时。
|
存储 数据库 时序数据库
InfluxDB是一个开源的时间序列数据库
InfluxDB是一个开源的时间序列数据库
326 2
|
存储 编译器 C语言
【C/C++ POD 类型】深度解析C++中的POD类型:从理论基础到项目实践
【C/C++ POD 类型】深度解析C++中的POD类型:从理论基础到项目实践
1216 0
|
消息中间件 监控 搜索推荐
基层卫生健康云综合管理平台源码(云HIS)
基层医疗云HIS作为基于云计算的B/S构架的HIS系统,为基层医疗机构提供了标准化的、信息化的、可共享的医疗信息管理系统,可有效进行医疗数据共享与交换,解决数据重复采集及信息孤岛等问题,实现对基层医疗数据的分析和挖掘,为基层卫生机构提供科学合理的业务管理服务。 可实现“云部署”,即可实现在云计算下的多种部署模式。系统采用SaaS服务模式的新驱动,功能设计充分合理,界面布局合理美观,每个用户可具有个性化工作台。
650 1
|
前端开发 调度
带你深入React 18源码之:useMemo、useCallback和memo
在这篇文章中,我们将探讨useMemo、useCallback和memo的用法和区别,并通过源码分析来理解它们的工作原理,开整!
带你深入React 18源码之:useMemo、useCallback和memo