programing

생성자가 없는 클래스를 사용하는 유형 스크립트

newstyles 2023. 6. 13. 22:02

생성자가 없는 클래스를 사용하는 유형 스크립트

Angular 웹사이트에서 "Tour of Heroes" 튜토리얼로 작업하는 동안 (짧은 시간 동안) 다음 구문을 발견했습니다.

class Hero {
  id: number,
  name: string,
}

const aHero: Hero = {
  id: 1,
  name: 'Superman'
}

console.log(aHero instanceof Hero); //false

이렇게 하면 무슨 소용이 있겠습니까?내가 "aHero"의 종류를 확인했을 때, 그것은 "Hero" 유형이 아닌 일반적인 개체일 뿐입니다.생성자를 사용하여 객체를 초기화하는 것이 더 나을까요?:

class Hero {
  constructor(id: number, name: string) {}
}

당신은 클래스를 당신이 사용하는 방식과 같은 유형으로 사용할 수 있습니다.그래서 Hero가 인터페이스든 클래스든 상관없습니다. 왜냐하면 당신은 그것을 유형으로 사용하고 있기 때문입니다.

class Hero { id: number; name: string }

또는

interface Hero { id: number; name: string }

다음은 Hero가 클래스인지 인터페이스인지 여부와 관련이 없습니다.

let hero: Hero = { id: 1, name: 'me' }

어디에interface그리고.class차별화는interface당신만을 위한 것이고, 자바스크립트로 변형되지 않습니다.aclass할 수도 있고 할 수도 없습니다.new하나의interface.

생성자 또는 생성자가 없는 경우new그렇다면 그것은instanceof이걸로 다시 해보세요.

let hero = new Hero();

당신의.instanceof로그는true당신이 키워드로 영웅의 인스턴스를 만들었기 때문입니다.new.

나는 이 질문이 이전에 답변된 적이 있다는 것을 알고 있지만 객체 지향 코드에 관한 한 항상 이렇습니다.

생성자 없이도 이 작업을 수행할 수 있습니다.

let hero: Hero = { ID: 1, Name: 'goku'};

그러나 생성자와 인스턴스화를 원한다면 클래스에서 이 작업을 수행할 수 있습니다.

class Hero
{
    //notice optional parameters. You have more flexibility this way.
    constructor(id?: number, name?: string)
    {  
      this.ID = id;
      this.Name = name;
    }

    ID: number;
    Name: string
}

구현을 통해 이 작업을 수행합니다.

let hero: Hero = new Hero(1,'goku');
let hero2: Hero = { ID: 2, Name: 'superman' }

언급URL : https://stackoverflow.com/questions/47996399/typescript-using-classes-without-constructor