记录一些学习笔记
接口
-
可选
// 有很多的属性并不是必须的,比如我们在表单中只需要用户输入 姓名,但是不强要求用书输入家庭地址 interface User { userName: string; address?: string; } 这样用户可以自己选择是否输入地址 -
只读
// 有些属性只在初始化时赋值,后面都不再修改 interface test{ readonly username: string; } -
readonly与const声明变量时使用const 声明属性,和内置成员时使用readonly -
函数类型
为函数创建一个接口 interface func { (source: string,address:string):void; } let mySearch: SearchFunc; mySearch = function(source: string, subString: string) { let result = source.search(subString); return result > -1; } // 在实现函数时,只会检查函数的参数位置上的类型是否符合,不会检查函数名称 -
类类型
//类的模型 implements 一个类实现了一个接口时,只对其实例部分进行类型检查。 constructor存在于类的静态部分,所以不在检查的范围内。 interface S { select():void; state: number; } class Test implements S { select () { } public state: number } -
继承接口
-
单继承
interface A { name:string; } interface B extends A{ age: number; } -
多继承
interface A { name: string; } interface B { age: number; } interface User extends A, B { greet(): void } const user: User = { name: 'dell', age: 20, greet() { console.log(`hello ${this.name}`) } } user.greet()
-
-
继承类
// 同样接口也可以继承类中的类型
class Test {
z:number;
getValue(){}
}
interface inter extends Test {
}
const value:inter = {
getValue: ()=>{},
z:1
}
但是如果Test中有private变量,那么这个inter类型只能用来表示Test类的子类或者派生类
class Child extends Test{}
const value:inter = new Child() // ok 派生类
const value:inter = new Test() // ok 子类