LOADING

TS

2024/11/14

unknown 与 any 的区别

unknown 类型的变量是不能调用方法的(可以保证安全)

any 就跟没有写类型一样

object 与 Object 的区别

object 代表所有非值类型(非原始类型)的类型,例如 数组 对象 函数等

Object 可以给任意值赋值

type 和 interface 的区别

interface 一定以对象的方式开始

type Condition = (n: number) = > boolean interface Condition {
  (n:number):boolean ;
}

区别:

1.interface 可以使用 extends/implements 继承;type 不能

注意:implements 是继承其他 ts 类型,而 extends 是继承真正的类(js 代码)

interface Person{
    run(type:boolean):boolean
}

interface H{
    set():void
}

class A{
    params:string
    constructor(params:string){
        this.params = params
    }
}

//也可以使用继承再使用
class Man extends A implements Person,H{
    run(type:boolean):boolean{
       return type
   }
    set(){
        //啥也没有,这就是用接口去描述类
    }
}

type 如果要扩展类型可以使用 &

type s = {
  name: string;
}
& {
  age: number;
}

2.重复定义处理,interface 会合并,type 会导致错误

interface

interface A {
  name: string | number;
}
interface A {
  age: number;
} //name跟age会进行合并

type

type Animal = {
  kind: string;
}

// 以下这行代码会导致错误
type Animal = {
  sound: string;
}

介绍一下 never 类型

never 类型通常用于表示不可能出现的情况,它可以用于增强代码的类型安全性和可读性。

当一个变量被推断为 never 类型时,表示该变量的类型不能是任何其他类型,即不存在任何值与其兼容。

这个类型通用会用于报错

如何定义类数组

函数的 arguments 就是一个类数组

function test() {
  arguments; //类数组
}

定义

interface IArguments {
  [index: number]: any;
  length: number;
  callee: Function;
}