ts的interface特性

2022-03-09  本文已影响0人  米诺zuo

interface 定义Person结构 interface Person {}

interface Person {
  name: string;
  age: number;
  ping(ip: string): void;
}

type 定义Person结构 type Person = {}

type Person = {
  name: string;
  age: number;
  ping(ip: string): void;
}

使用Person 类型

let user: Person = {
  name:'max',
  age:34,
  ping(ip: string){
    console.log('hi, ip is' +ip);
  }
}
user.ping('102.101.122.22');
// output 
// [LOG]: "hi, ip is102.101.122.22" 

interface用于不同class之间的共有的属性和方法。使用implements,一个class可以实现多个接口,逗号拼接。

interface Greetable {
  name: string;
  greet(pharse: string): void;
}

class Person implements Greetable{
  name: string;
  age =  30;
  constructor(n: string){
    this.name = n;
  }
  greet(pharse: string) {
    console.log(pharse + ' ' + this.name)
  }
}

let user: Greetable = new Person('max')
user.greet('you are');
console.log(user)

output:

[LOG]: "you are max" 
[LOG]: Person: {
  "age": 30,
  "name": "max"
} 

readonly 可以在interface中使用。
public, private不能在interface中使用。error: 'public' modifier cannot appear on a type member.

interface 可以通过 extends 继承另一个interface

interface Named {
  name: string;
}
interface Greetable extends Named {
  greet(pharse: string): void;
}

使用interface 的定义 function Type

// type AddFn = (a: number, b:number) => number;
interface AddFn {
  (a: number, b:number): number;
}
let  add: AddFn;
add = (n1:number, n2:number) => {
  return n1 + n2
}

interface 使用?定义可选参数

interface AddFn{
  name?: string;
  greet?(): number;
}

interface 编译成js没有任何输出,在js里面没有,ts里特有的。

上一篇 下一篇

猜你喜欢

热点阅读