您现在的位置是:首页 >学无止境 >TypeScript学习_02_接口_未完网站首页学无止境
TypeScript学习_02_接口_未完
简介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) {}
}
接口描述了类的公共部分,而不是公共和私有两部分。
类是具有两个类型的:静态部分的类型和实例的类型。
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。