TS3——类——接口规范类——函数接口——定义类型interface和type的区别

Posted 勇敢*牛牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TS3——类——接口规范类——函数接口——定义类型interface和type的区别相关的知识,希望对你有一定的参考价值。

当前的文件为一个模块,它相当于有了作用域
export 


ts中定义一个类,使用class关键字来完成
定义的类,它也可以当前一个类型来使用
ts中定义的类,它有类的修饰符
如果你定义的方法或属性没有指修饰符,则默认为public
public    公有的 定义的方法或属性在本类或子类或实例中都可以操作
protected 受保护的 定义的方法或属性只能在本类或子类中操作
private   私有的 定久的方法或属性只能在本类中操作
readonly  定义后,当前的属性它就为只读,不可修改
static    定义的属性为静态属性,定义的方法为静态方法,静态方法中不能使用this
访问器和修改器  getter/setter

标准写法
class Person 
  // 定义属性
  public name: string
  // 属性进行初始化
  constructor(name: string) 
    this.name = name
  

定义的类,它也可以当前一个类型来使用

class Person 
  // 定义属性
  public name: string
  // 属性进行初始化
  constructor(name: string) 
    this.name = name
  


let p:Person = new Person("niuniiu")
console.log(p.name);

=========简写
class Person
    constructor(public name:string)
        
    


let p1:Person = new Person("牛牛")
console.log(p1);

typescript属性的封装时,用到set方法和get方法时的错误提示:
​​Accessors are only available when targeting ECMAScript 5 and higher.

大概就是说:访问器仅在针对ECMAScript 5及更高版本时可用。
可以通过命令指定:

tsc xxx.ts -t es5
class Person
    constructor( public _name:string)
    get name()
        return this._name+"@@@"
    
    set name(name:string)
        this._name = name
    


let p1:Person = new Person("牛牛")
console.log(p1.name)
p1.name="niuniu";
console.log(p1.name)

类的封装性

class Person
    constructor(private _name:string)
    /* 类的封装性 */
    private print(str:string)
        console.log(str);
    ;
    say(str:string)
        this.print(str)
    


let p1:Person = new Person("牛牛")
console.log(p1.name)
p1.name="niuniu";
console.log(p1.name)
p1.say("不怕困难")

接口来定义类

interface InterfacePerson1 
    id: number
    run(action: string): void

interface InterfacePerson2 
    name: string
    age: number



class Person implements InterfacePerson1, InterfacePerson2 
    id!: number
    name!: string
    age!: number
    run(action: string): void 
        console.log('我是run方法')
    

接口限制函数的类型

interface InterFn
    (id:number,name:string):object


const fn:InterFn = (id:number,name:string)=> 
    return id,name

接口继承

interface Parent 
  id: number
  // name: string

// 把Parent继承过来,这样它就有了父接口中定义的规则  起到一定的限制,如果子接口有父接口中的属性,则类型要一致
interface Child extends Parent 
  name: string


class Person implements Child 
  name!: string
  id!: number


interface和type的区别

type它也是能定义类型 type理解为是interface别名写法
type和interface都可以用来定义类型也都可以限制定义类
type
定义类型的语法是否一样的
type定义的类型名称在一个模块下面是不能重名的
type是可以进行交叉

interface
定义类型的语法是否一样的
interface定义的接口,可以重名,重名后它会自动进入交叉类型,但是要注意的是,重名的属性它的类型必须是相同的;
可以扩展属性
interface可以继承,也可以多继承;
接口它可以用来规范定义的类,接口它还可以继承,而且它还支持多继承,多个以逗号隔开

interface String 
  toSearch(): string

String.prototype.toSearch = function () 
  return '我是一个搜索方法'

type,如果你直接定义,它也可以用于规范类,但是它不能继承,它可以交叉,而且可以交叉很多

type InterfaceUser2 = 
  id: number
 &  age: number 

class Person2 implements InterfaceUser2 
  id!: number
  age!: number

以上是关于TS3——类——接口规范类——函数接口——定义类型interface和type的区别的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript--接口

TS之接口:①属性接口

TS3——类

接口和抽象类的区别

接口(Interface)的深入理解

深入类和对象