当前位置:首页 > 服务端 > typescript(三) typescript结构兼容性

typescript(三) typescript结构兼容性

结构的兼容性检查本质上是当前的数据的属性要覆盖目标数据的属性。

1. 接口的兼容性检查

// 当实际数据的属性包含目标类型的所有属性时,能够兼容
interface Animal{
  username: string,
  age: number
}
interface Person {
  username: string,
  age: number,
  married: boolean
}

let b:Person = {username: 'lee', age: 1, married: false};
function getName(val: Animal) {
  return val.username;
}
// 但是Person类型包含参数对应的Animal中所有属性;
// 可以兼容
getName(b); 

2. 基本类型的兼容性检查

// 1. 基本类型的兼容性
let all: string|number;
let str: string = "hello world";
all = str;

// 2. 基本类型的兼容性
let a1: {
  toString(): string
};
let a2: string = 'hello';
a1 = a2;

3. 类的兼容性

class AnimalNew {
  public name: string = 'lee';
}
class Dog extends AnimalNew{
  public food: string = 'bone';
}
let dog: Dog;
dog= new AnimalNew(); // ❌Animal不包含food属性

let ani: AnimalNew;
ani = new Dog(); // ✅Dog包含Animal类型的属性

4. 函数的兼容性

函数的兼容性需要先比较函数的参数,要求当前的参数是目标函数参数的子集。

然后要求返回值一致。

type sumFn = (a: number, b: number) => number
let sum:sumFn;
let sum1 = function(a: number):number {
  return a;
}
sum = sum1;

如果目标函数的参数的类型是多个可选类型,那么当前函数的参数的可选类型需要包含目标函数参数的可选类型。

type addFn = (a: number|string) => void;
let add: addFn;
add = function(b: number) {}; 
/* 
❌Types of parameters 'b' and 'a' are incompatible.
  Type 'string' is not assignable to type 'number'.
*/
add = function(a: number|string|boolean) {}; //

5. 泛型的兼容型

接口的泛型。当接口内容为空时,可以兼容。当内容不为空时,不同类型不兼容。

interface User<T> {
}
let x:User<number> = {};
let y:User<string> = {};
y = x; //

interface Name<T>{
  n: T
}
let n:Name<number> = {n: 1};
let m:Name<string> = {n: '1'};
n = m; // ❌ 不兼容

6. 枚举类型和数值类型互相兼容

enum Colors{
  RED,
  BLUE
}
let c:Colors;
c = 0;
let c1:number;
c1 = Colors.RED;

 

作者:Lyra李
来源链接:https://www.cnblogs.com/lyraLee/p/12388878.html

版权声明:
1、Java侠(https://www.javaxia.com)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaxia.com/server/125482.html

分享给朋友:

“typescript(三) typescript结构兼容性” 的相关文章