小言_互联网的博客

TypeScript教程

457人阅读  评论(0)

注:本文仅对ts中相对js不一样的地方做了笔记📒哟~想看js教程请挪步👉🏻

js基础教程

简介

   Typescript是以javascript为基础构建的语言(是JavaScript的超集),可以在任意支持Javascript的平台中执行,但是它不能直接被js解析器执行,需要通过编译成js语言才可以解析;

类型声明

   类型声明是TS最重要的一个特点,通过类型声明可以指定TS中变量(形参、实参)的类型,在指定类型之后,当为变量赋值时,ts编译器会自动检查值是否符合类型声明,符合才会进行赋值;


  
  1. let 变量: 类型; // 声明
  2. let 变量: 类型 = 值; // 声明并赋值
  3. function fn( 参数: 类型, 参数: 类型): 类型 {
  4. }
类型 例子 描述
number 1 23 -23 任意数字
string 'hi' 'welcome' 任意字符串
boolean true false 布尔值
字面量 12 ‘string’ {} [] 限制变量的值就是该字面量的值
any * 任意类型
unknown * 任意类型
void 空值(undefined) 没有值(或undefined),一般用于声明函数返回值
never 没有值 不能是任何值
object {name: '小明'} 任意的js对象
array [2, 3, 4] 任意的js数组
tuple [4, 5] 固定长度的数组,新增数据类型
enum enum{male, female} 枚举,新增数据类型

    注意当声明类型为any时,相当于对该变量关闭了Ts类型检测,但是在将一个any类型的变量a赋值给一个非any变量b时,会将b也变成any类型(容易造成变量类型混乱,所以要慎用any);若变量声明时未定义类型时,默认是any类型(隐式的any);一般用unknown代替any使用,它相当于一个安全类型的any,它不可以随意赋值给其他类型变量;

never表示永远不会返回结果,可以用于函数抛错:


  
  1. function fn( ): never {
  2. throw new Error( '抛错喽')
  3. }

{}用于指定对象中可以包含哪些属性:


  
  1. let person : {
  2. name: string,
  3. class: string,
  4. project?: string
  5. } // 声明person变量
  6. person = {
  7. name: '小明',
  8. class: '一年级'
  9. } // 变量赋值
  10. let dog : {
  11. name: string,
  12. [ propName: string]: any
  13. } // 声明dog变量
  14. dog = {
  15. name: '汪汪',
  16. gender: '男',
  17. age: 1
  18. } // 增加了number类型的age与string类型的gender

声明对象时,在属性名后面加上?表示该属性是可选的

声明对象时,加上[propName: string]: any 表示可定义任意类型的对象(propName为属性名,属性名为string类型)

声明数组时,可以在变量前加上类型,表示数组内都是什么类型的数据,或者通过Array<类型>表示;


  
  1. 类型[];
  2. Array<类型>

  
  1. let e: string[]; // 表示e是字符串数组
  2. let f: number[]; // 表示f是数字数组
  3. let g: Array< string> // 表示g是字符串数组

元组是Ts新增的数据类型,元组就是固定长度的数组;元组中的元素不必保持类型一致


  
  1. 语法: [类型, 类型, 类型]
  2. 示例:
  3. let h :[ string, number, string];
  4. h = [ 'hi', 1, 'num']

枚举一般用于对已知的数据进行列举:如果枚举中的标识符没有赋值,则值一般为下标,如下例中Male即为0


  
  1. enum Gender {
  2. Male,
  3. Female
  4. } // 定义Gender为枚举类型
  5. let i: {
  6. name: string,
  7. gender: Gender
  8. } // gender属性为Enum类型
  9. i = {
  10. name: '小明',
  11. gender: Gender. Male
  12. }

可以使用 | 来连接多个类型(联合类型)

let c: 'hi' | 'hello' // c是hi或是hello

类型断言

类型断言有两种方式:使用as或者使用<>在变量前声明;类型断言用于告诉解析器变量的实际类型;


  
  1. 变量 as 类型
  2. <类型>变量

接口

在面向对象的编程中,接口是一种规范的定义。规范一个类中应该包含哪些属性和方法,同时接口也可以当做类型声明去使用;

接口可以在定义类的时候去限制类的结构,接口中的所有属性都不能有实际的值,只能定义对象的结构;并且在接口中所有的方法都是抽象方法(在类中都要实现);

接口可以继承接口,实现接口的子类也可以同时实现多个接口;


  
  1. interface myInterface {
  2. name: string
  3. age: number
  4. }
  5. const obj: myInterface = {
  6. name: '小明',
  7. age: 12,
  8. } // 接口作为类型声明来使用

  
  1. interface myInter {
  2. name: string;
  3. sayHello(): void
  4. }
  5. // 用类实现一个接口,即使类满足接口的要求
  6. class MyClass implements myInter {
  7. name: string,
  8. constructor( name: string) {
  9. this. name = name
  10. }
  11. sayHello( ) {
  12. console. log( '大声呼喊')
  13. }
  14. }

泛型

泛型是解决类、接口、方法的复用性以及对不确定数据类型的支持;


  
  1. // 泛型类
  2. function fn<T>( a: T): T {
  3. //参数a和function返回值皆是泛型T
  4. }
  5. function fn2<T, K>( a: T, b: K): T{
  6. return a
  7. }
  8. // 参数a和function返回值皆是泛型T,参数b是泛型K


转载:https://blog.csdn.net/ks795820/article/details/128594729
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场