File tree Expand file tree Collapse file tree 2 files changed +73
-2
lines changed
Expand file tree Collapse file tree 2 files changed +73
-2
lines changed Original file line number Diff line number Diff line change 11( function ( ) {
22
33 type myType = {
4- name : string ,
4+ readonly name : string ,
55 age : number ,
66 [ propName : string ] : any ,
77 }
2727 gender : 'male' ,
2828 }
2929
30+
31+
32+ // 函数类型接口
33+ interface SearchFunc {
34+ ( source : string , subString : string ) : boolean ;
35+ }
36+ let mySearch : SearchFunc ;
37+ mySearch = function ( source : string , subString : string ) {
38+ let result = source . search ( subString ) ;
39+ return result > - 1 ;
40+ }
41+
42+
3043 // interface 和 abstract 不同的是 abstract 可以有具体的方法,interface 所有的方法都是抽象方法
3144 // 接口定义了类的规范标准
3245 interface myInter {
4457 }
4558 }
4659
60+ // 类类型
61+ interface ClockConstructor {
62+ new ( hour : number , minute : number ) : ClockInterface ;
63+ }
64+ interface ClockInterface {
65+ tick ( ) : void ;
66+ }
67+ function createClock ( ctor : ClockConstructor , hour : number , minute : number ) : ClockInterface {
68+ return new ctor ( hour , minute ) ;
69+ }
70+ class DigitalClock implements ClockInterface {
71+ constructor ( h : number , m : number ) { }
72+ tick ( ) {
73+ console . log ( "beep beep" ) ;
74+ }
75+ }
76+ class AnalogClock implements ClockInterface {
77+ constructor ( h : number , m : number ) { }
78+ tick ( ) {
79+ console . log ( "tick tock" ) ;
80+ }
81+ }
82+ // 传入类构造函数
83+ let digital = createClock ( DigitalClock , 12 , 17 ) ;
84+ let analog = createClock ( AnalogClock , 7 , 32 ) ;
85+
86+
87+ // 接口继承
88+ interface Shape {
89+ color : string ;
90+ }
91+ interface PenStroke {
92+ penWidth : number ;
93+ }
94+ interface Square extends Shape , PenStroke {
95+ sideLength : number ;
96+ }
97+ let square = < Square > { } ;
98+
99+
47100
48101} ) ( ) ;
Original file line number Diff line number Diff line change @@ -34,4 +34,22 @@ class MyClass<T> {
3434 this . name = name ;
3535 }
3636}
37- const mc = new MyClass < string > ( 'csxiaoyao' ) ;
37+ const mc = new MyClass < string > ( 'csxiaoyao' ) ;
38+
39+
40+ // 使用带有调用签名的对象字面量来定义泛型函数
41+ function identity < T > ( arg : T ) : T {
42+ return arg ;
43+ }
44+ let myIdentity : {
45+ < T > ( arg : T ) : T
46+ } = identity ;
47+ interface GenericIdentityFn < T > {
48+ ( arg : T ) : T ;
49+ }
50+ let myIdentity2 : GenericIdentityFn < number > = identity ;
51+
52+ // 在泛型里使用类类型 在TypeScript使用泛型创建工厂函数时,需要引用构造函数的类类型
53+ function create < T > ( c : { new ( ) : T ; } ) : T {
54+ return new c ( ) ;
55+ }
You can’t perform that action at this time.
0 commit comments