typeScript

  • 引言
  • 基础类型
  • 任意类型
  • 接口和对象类型
  • 数组的类型
  • 函数扩展

引言

这是本人跟着教程 哔哩哔哩up(小满zs)ts教程 所做的记录

起步安装 npm install typescript -g
运行tsc 文件名
nodejs 环境执行ts
npm i @types/node --save-dev (node环境支持的依赖必装)
npm i ts-node --g

基础类型

  1. 字符串
let f:string = "帅逼"
let sring:sring = `我是大${f}`
  1. 数字类型
let length:number = 18;
console.log(`我真的${length}`);
  1. 布尔类型
    使用构造函数创造的boolean不是布尔值,而是布尔值对象
    直接使用布尔构造函数没有问题
let boolean:boolean = true;let createBoolean:boolean = new Boolean(1) // 在代码中会报错
let boolean2:boolean = Boolean(1); //这就没有问题
  1. 空类型
    js中没有空值的概念,在ts中可以用void来表示没有任何返回值的函数。

void类型的用法,主要是用在我们不希望调用者关心函数返回值的情况下,比如通常的异步回调函数。
void可以定义undefined 不能用来定义null类型

//1.void类型的用法,主要是用在我们不希望调用者关心函数返回值的情况下,比如通常的异步回调函数。
function voidFn():void{console.log("Test void")
}//2.void可以定义undefined 不能用来定义null类型
let u:void = undefined;
let res:void = null // 会报错
  1. null 和undefined
let u:undefined = undefined;
let n:null = null

null 和undefined 不能赋值给其他类型的变量

let unde:undefined = undefined;
let str:string = "1"
str=unde; //会报错

任意类型

any类型 和unknown 顶级类型

any类型

  1. 在没有强制限定那种类型,随时切换类型都可以 可以用any声明。
  2. 我们对any类型任何操作都不需要检查类型。
  3. 声明变量的时候没有指定变量类型,就会默认为any类型
  4. 声明变量的时候使用any就失去了ts类型检测的作用
//1. 在没有强制限定那种类型,随时切换类型都可以 可以用any声明。
let any:any = 123;
any = "any"; //不会报错// 2.声明变量的时候没有指定变量类型 就会默认为any类型;
let han;
han = "帅逼";
han = 18;
han = true;
//弊端如果使用any 就失去了 TS类型检测的作用
//我真不要脸

unkown 类型
在ts3.0引入了unkown类型 也就是top type

  1. unknown类型不能赋值给其他类型
  2. unknown 可赋值对象只有unknown 和any
let value:unknown;
value = true;
value = 42;
value = "hello world"
value = []
value = true
value = {}
value = null
value = undefined;
vlaue = Symbol("type")//1. unknown类型不能赋值给其他类型
let name:unknown = "lili";
let name2:string = names //会报错//2. unknown 可赋值对象只有unknown 和any
let bbb:unknown = "123";
let aaa:any = bbb;

any 和unknown的区别

  1. unknown类型不能赋值给其他类型,any类型可以赋值给任何一个。
  2. 如果用any声明一个对象a 调用一个a没有定义的b属性 不会报错,而 用unknown是不能调用属性和方法的。
let a:any{b:1};
a.b //不会报错let a: unknown {b:1}
a.b //会报错

接口和对象类型

在typescript中,我们定义对象要用interface接口,我的理解是使用interface来定义一种约束,让数据结构满足约束的格式。

  1. 使用接口约束的时候不能多一个属性也不能少一个属性,必须跟接口保持一致。
  2. 是否选用的属性 在属性的后面 跟上 ?操作符。
interface Person {b:string,a:string
}
// 这样写是会报错的 因为我们在person定义了a,跟b但是对象里面缺少b属性
// 使用接口约束的时候不能多一个属性也不能少一个属性,必须跟接口保持一致const person:Person  = {a:"213"
}

重名的interface 可以合并

interface A {name:string
}
interface A {age:number
}
let a :A = {name:"xx",age:20}//继承
interface A {name:string
}
interface B extends A{age:number
}
let obj:B = {age:18,name:"string"
}// 是否选用的属性 在属性的后面 跟上 ?操作符。
interface Person{b?:string,a:string
}
const person:Person = {a:"18"// 这个实例 不用b属性也不会报错 因为他是可选的。
}

任意属性[propName:string]
一旦定义了任意属性,那么确定属性和可选属性的类型必须是它的类型的子集。

// 在这个例子当中我们看到接口中并没有定义C但是并没有报错
// 但是 把 c 的值 改为 非字符串类型的就会报错
interface Person {b?:string,a:string,[propName:string]:any;
}
const person:Person = {a:"213",c:"123"
}

只读属性readonly
只读属性是不允许赋值的只能读取。

interface Person {b?:string,readonly a: string,[propName:string]:any;
}
const person:Person = {a: "213",c:"string"
}
person.a = 123 //这里会报错 因为 readonly 只读不能更改

添加函数

interface Person {b?:string,readonly a: string,[propName:string]:any;cb():void
}
const person:Person = {a: "string",c: "123",cb:()=>{console.log(123)}
}

数组的类型

  1. 类型
// 类型加中括号
let arr:number[] = [1,2,3]let arr1:number[] = [1,2,3,"1"]  //会报错
// 向数组中push 不同类型的 也会报错
arr.push("string") // 会报错。let arr:number[] = [1,2,3] // 数字类型的数组
let arr2:string[] = ["1","2"]; // 字符串类型的数组

数组泛型
规则Array<类型>

let arr:Array<number> = [1,2,3,4,5]

用接口表示数组
一般用来描述类数组。

interface NumberArray {[index:number]:number;//表示索引类型是数字,值类型也是数字。
}
let fibonacci:NumberArray= [1,2,3,4,5];

多维数组

let data:number[][] = [[1,2],[3,4]];

arguments类数组

function Arr(...args:any):void{console.log(arguments)let arr:number[] = arguments
}
Arr(111,222,333)function Arr(...args:any): void {console.log(arguments) //ts内置对象IArguments 定义let arr:IArguments = arguments
}
Arr(111, 222, 333)// 其中 IArguments 是TypeScript 中定义好了的类型,它实际上就是
interface IArguments {[index:number]:any;length:number;callee:Function;
}

any在数组中的应用
一个常见的例子数组中可以存在任意类型

let  list : any[ ] = ["test",1,[],{a:1}];

函数扩展

函数的类型
注意,参数不能多传,也不能少传,必须按照约定的类型来。

const fn = (name:string,age:number):string = >{return name + age
}
fn("张三",18)

函数的可选参数?
通过? 来表示该参数为可选参数

const fn = (name:string,age?:number):string=>{return name + age
}
fn("张三1")

函数参数的默认值

const fn = (name:string= "我是默认值"):string =>{return name
}
fn()

接口定义函数

//定义参数 num 和num2 后面定义的返回值的类型
interface Add{(num:number,num2:number):number
}
const fn:Add = (num:number,num2:number):number =>{return num + num2;
}
fn(5,5)interface User{name:string;age:number
}
function getUserInfo(user:User):User{return user
}

定义剩余参数

const fn = (array:number[],...items:any[]):any[]=>{console.log(array,items)return items
}
let a:number[] = [1,2,3];
fn(a,"4","5")

函数重载
重载是方法名字相同,而参数不同,返回类型可以相同也可以不同。
如果参数类型不同,则参数类型应设置为 any。
参数数量不同你可以将不同的参数设置为可选。

function fn(params:number):void
function fu(params:string,params2:number):void
function fn(params:any,params2?:any):void{console.log(params)console.log(params2)
}

typeScript(小满版本);相关推荐

  1. ng serve出错,关于TypeScript的版本问题

    执行ng serve时报错: ERROR in The Angular Compiler requires TypeScript >=3.1.1 and ❤️.3.0 but 3.3.3333 ...

  2. npm教程:如何查看TypeScript版本、卸载TypeScript和安装TypeScript

    npm教程:如何查看TypeScript版本.卸载TypeScript和安装TypeScript TypeScript是JavaScript的一个超集,也可以编译成JavaScript:适用任何浏览器 ...

  3. 初步学习TypeScript

    使用Visual Studio Code搭建TypeScript开发环境 1.TypeScript是干什么的 ? TypeScript是由微软Anders Hejlsberg(安德斯·海尔斯伯格,也是 ...

  4. Visual Studio Code搭建TypeScript开发环境

    转载 http://www.cnblogs.com/sunjie9606/p/5945540.html 使用Visual Studio Code搭建TypeScript开发环境 1.TypeScrip ...

  5. WebStorm使用TypeScript

    前提条件: 安装nodejs 安装webstorm,自带有typescript 本人的环境是webstorm 2016.3.3, nodejs 6.9.2 可以通过npm install -g typ ...

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

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

  7. TypeScript 3.9 正式发布!平均编译时长从 26 秒缩短至 10 秒

    作者 | 微软官方博客 译者 | 核子可乐 策划 | 小智 稿源 | 前端之巅 今天,微软在其官方博客宣布:TypeScript 3.9 版本已经正式发布,详情见下文. 有些朋友可能对 TypeScr ...

  8. 打造TypeScript的Visual Studio Code开发环境

    打造TypeScript的Visual Studio Code开发环境 本文转自:https://zhuanlan.zhihu.com/p/21611724 作者: 2gua TypeScript是由 ...

  9. 158. 精读《Typescript 4》

    1 引言 随着 Typescript 4 Beta 的发布,又带来了许多新功能,其中 Variadic Tuple Types 解决了大量重载模版代码的顽疾,使得这次更新非常有意义. 2 简介 可变元 ...

最新文章

  1. ElasticSearch(六) Update API
  2. Ruby之Enumerator类
  3. 数据库中的索引技术——哈希索引
  4. MediaCodec问题汇总
  5. Android移动开发之【Android实战项目】DAY6-安卓多线程
  6. /GS 编译选项,_security_cookie,软件强制DEP
  7. Web前端是做什么的?就业前景如何?
  8. 算法竞赛入门经典(第二版) | 例题5-4 反片语 (map+标准化)(UVa156,Ananagrams)
  9. 【语义分割】Fully Attentional Network for Semantic Segmentation
  10. lmbs PHP,PHP 清空 MySql 指定数据表中的所有数据
  11. MyEclipse 如何使用断点调试
  12. 编程统计BUF字单元数据中所含1的个数,并将结果存入COUNT单元中。
  13. C++串行编程步骤介绍
  14. php 5.4.25,php5.4.25的c核心用vs2008sp1编译无法通过。解决思路
  15. Linux内核分析与驱动编程-1
  16. 软件测试达内视频笔记(二)
  17. Opening My World——ESRI用户大会有感
  18. 开源项目zheng学习
  19. java reader类子类_Java之InputStreamReader类的实现
  20. 张小龙请回答:微信这些功能是咋想的?

热门文章

  1. 用Scikit-learn进行机器学习(二):使用Scikit-learn进行KNN分析——如何进行电影分类
  2. 线程池——核心线程数设置依据
  3. 解析matplotlib.colors.LinearSegmentedColormap中的字典颜色分割,自定义colorbar
  4. Linux安全基线加固之账号和口令
  5. 高考成绩现在还能查询吗2021,每年的高考成绩什么时候出来 2021几号查分
  6. 做一个php 框架 书,搭建自己的 PHP 框架心得 (二)- 枕边书
  7. winform宿主webapi
  8. 西电南理工计算机学院,【全国六所电子科技大学排名】_电子科学与技术专业:最好的6所大学!有2所仅仅是211!...
  9. 颠覆OLED的技术:石墨烯将大规模应用
  10. 在tomcat下配置mysql的数据库连接池及Servlet