ts学习笔记十:兼容性处理

本文探讨了TypeScript中不同类型、接口和函数的兼容性规则,包括基础类型、接口和函数参数的兼容性。重点讲解了如何确保类型安全,例如允许子类型赋值给父类型,以及函数参数的逆变和协变概念。此外,还通过实例展示了如何处理联合类型和函数返回值的兼容性问题。
摘要由CSDN通过智能技术生成
// ts中的兼容性  我们希望类型可以相互赋值 

// 普通类型  接口、函数 、类.



// 1.基础类型的兼容性  默认情况下都是定义好类型后不能赋值给其他类型

type NumOrStr = number | string;
let numOrStr: NumOrStr = 'abc';  // | 表示大的类型  子类型 -> 父类型

// 检测方式 鸭子检测 只要叫声像鸭子 就是鸭子
type MyStr = { toString(): string }
let str: MyStr = 'hello'; // 多的条件可以赋予给少的条件 , 一切都是为了安全

interface IVegetables {
    color: string,
    taste: string
}
// 2.interface ITomato{ // 将一个值赋予给了类型, 是不会出现兼容性的 要求必须满足这个接口,两个接口之间是存在兼容性问题的
//     color:string,
//     taste:string,
//     size:string
// }
// let vegetables!:IVegetables;
// let tomato!:ITomato

let vegetables: IVegetables;
let tomato = {
    color: 'red',
    taste: 'sour',
    size: 'big'
}
vegetables = tomato;  // 通过接口的兼容性 可以处理赋予多的属性


// 3.函数兼容性 (1)函数的参数 和返回值  类型的兼容 类型的赋值可能会发生兼容性处理

// 针对参数的个数 和 返回值类型
// let sum1 = (a: string, b: string): string => a + b
// let sum2 = (a: string): string => a

// sum1 = sum2; // 我运行你传递两个参数 ,但是你传递了一个  我只能传递一个,你给了我二个

function forEach<T>(arr: T[], cb: (item: T, index: number, arr: T[]) => void) {
    for (let i = 0; i < arr.length; i++) {
        cb(arr[i], i, arr);
    }
}
forEach([1, 2, 3, 4], (item) => {
    console.log(item);
})

type sum1 = (a: string, b: string) => { name: string };
type sum2 = (a: string) => { name: string, age: number }
let sum1!: sum1;
let sum2!: sum2;

sum1 = sum2;

// 针对参数的类型做兼容性处理   --》 ts中的
// 逆变 和 协变 函数的参数是逆变的可以传父类  函数的返回值是协变的可以返回子类
// 传逆父 返协子  考虑兼容性

class Parent {
    money!: string
}
class Child extends Parent {
    house!: string
}
class Grandson extends Child {
    eat!: string
}
// 对于参数而言 儿子可以处理 钱和房子
function getFn(cb: (person: Child) => Child) {

   
}
// Child Parent =>    Child Grandson
getFn((person: Parent) => new Grandson);  // 对于parent而言只有money  但是对于child -》 money和source


// 函数的参数是联合类型的时候 
function getType(cb: (val: string | number) => string | number) {
    cb('123')
}
getType((val: string|number|boolean ) => { //  string|number|boolean = val:string|number
    return 123
})
// 1.并集 可以用少的 付给多的  string | number  => number、string
// 2.多的属性可以赋予给少的属性
// 3.函数的参数个数少的可以赋予给个数多的

export { }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值