您现在的位置是:首页 >学无止境 >TypeScript学习_02_接口_未完网站首页学无止境

TypeScript学习_02_接口_未完

RxnNing 2024-06-17 16:40:15
简介TypeScript学习_02_接口_未完

接口

类型检查器不会去检查属性的顺序

对象实现了这个接口

可选属性

在可选属性名字定义的后面加一个?符号

  • 可选属性的好处之一是可以对可能存在的属性进行预定义

  • 好处之二是可以捕获引用了不存在的属性时的错误。

Interface Pint {x?:number}

只读属性

在属性名前用 readonly来指定只读属性

Interface Point{readonly x: number}

TypeScript具有ReadonlyArray类型

let a: number[] = [1, 2, 3, 4];
let ro: ReadonlyArray<number> = a;

readonly vs const

做为变量使用的话用 const,若做为属性则使用readonly

注意

对象字面量会被特殊对待而且会经过 额外属性检查,当将它们赋值给变量作为参数传递的时候。

interface LabelValue { width?: number, color?: string }
function fn (args: LabelValue) {}

let a = { width: 1, name: 'ren' }


# 正确
let b: LabelValue = a,//正确 不是字面量直接赋值,所以没有进行 *额外属性检查*
fn(a)//正确


# 错误
let b: LabelValue = { width: 11, name: 'ren' }//报错 name 是额外校验的,报错
fn({ width: 11, name: 'ren' }) //报错

绕开这些额外属性检查

类型断言

fn({ width: 11, name: 'ren' } as LabelValue) 

添加一个字符串索引签名

interface LabelValue { 
...;
[propName:string]: any;
}

函数类型

interface SearchFunc {
  (source: string, subString: string): boolean;
}
let fun : SearchFunc = function (a,b) {return -1 > 1}

函数的参数名不需要与接口里定义的名字相匹配

如果你不想指定类型,TypeScript的类型系统会推断出参数类型

可索引的类型

interface StringArray {[index: number]: string;}
let arr: StringArray = ['11', '22']

可以描述那些能够“通过索引得到”的类型

支持两种索引签名:字符串数字;数字索引的返回值必须是字符串索引返回值类型的子类型。因为当使用 number来索引时,JavaScript会将它转换成string然后再去索引对象

类类型

用它来明确的强制一个类去符合某种契约

interface ClockInterface {
    currentTime: Date;
    setTime(d: date)
}
class Clock implements ClockInterface {
    currentTime: Date;
    setTime(d: Date) {this.currentTime = d}
    constructor(h: number, m:number) {}
}

接口描述了类的公共部分,而不是公共和私有两部分。

类是具有两个类型的:静态部分的类型和实例的类型。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。