typescript 基础知识(二)

一 TypeScript基本概念定义:TypeScript核心原则之一是对值所具有的结构进行类型检查。

泛型:是指在函数,接口,类定义时不指名具体某种类型,在运行时指定特定类型的一种特性。
enum枚举:表示一个命名元素的集合。
 

二 元组与数组区别:

在所有的数据类型里,Array是唯一的泛型类型,也是唯一有两种不同的写法:Array<T>T[]

元组的长度是固定已知的。因此使用场景也非常明确,适合用在有固定的标准/参数/配置的地方,比如经纬度坐标、屏幕分辨率等。

三 交叉类型与联合类型:ts联合类型与交叉类型
 
1 交叉类型(并集,用&相连):当我们使用交叉类型读取属性,可以获取所有类型的任一属性名,赋值的时候需要满足所有类型的结构。注意:当我们交叉的类型中含有相同属性名但属性类型不一样的情况,该属性会成为never类型。 
interface A {
  name: string
  age: number
}

interface B {
  name: number
  id: string
}

type Intersection = A & B;
const c: Intersection = {} as any;
c.age = 10; // 正确
c.name = '1' // 不能将类型“"1"”分配给类型“never”

2 联合类型(合集,用|相连):当我们使用联合类型读取属性的时候,只能获取其共同的属性名;

interface A {
  name: string
  age: number
}

interface B {
  name: number
  id: string
}

type Union = A | B;
const c: Union = {} as any;
c.name // 正确
c.age // 类型“Union”上不存在属性“age”

3 类型保护:

常用的类型保护有typeof类型保护,instanceof类型保护和自定义类型保护

1 function BuildURL(param: string | number): any {
2   if (typeof param === 'string') {
3     return param.toUpperCase()
4   }
5 }

由于使用了typeof类型保护,所以在if的分支里可以告诉编译器放心的调用string类型的方法,编译器也会给出自动提示

四 类型别名Type: 类型别名会给一个类型起个新名字,多用于复合类型。

type strType = string | number | boolean;
let str2: strType = "10";
str2 = 10;
str2 = true;

interface muchType1 {
  name: string
}
interface muchType2 {
  age: number
}
type muchType = muchType1 | muchType2
let obj: muchType = { name: "张三" }
let obj2: muchType = { age: 10 }
let obj4: muchType = { name: "张三", age: 10 }

五 interface(接口)与Type(类型别名)区别:https://juejin.cn/post/6844903749501059085#heading-11

接口:是在我们的应用程序中充当契约的结构。它定义了要遵循的类的语法,这意味着实现接口的类必须实现它的所有成员。

相同点:1都可以描述一个对象或者函数 2 都允许拓展(extends)

区别: type可以而interface不可以:

  • type 可以声明基本类型别名,联合类型,元组等类型
  • type 语句中还可以使用 typeof 获取实例的 类型进行赋值
interface 能够声明合并
 1 interface User {
 2  name: string
 3  age: number
 4 }
 5 
 6 interface User {
 7  sex: string
 8 }
 9 
10 /*
11 User 接口为 {
12  name: string
13  age: number
14  sex: string 
15 }
16 */

强大的类型别名操作API

typeScript中interface与type对比面试题

深入理解TypeScript 

原文地址:https://www.cnblogs.com/terrymin/p/14608350.html