기본적으로 다섯 가지 옵션 이 있다고 생각합니다 . 달성하고자하는 목표에 따라 그 중에서 선택하는 것이 쉬울 수 있습니다.
TypeScript를 사용하여 형식 검사를 적용하기 때문에 대부분의 경우 클래스 를 사용하고 인스턴스화하는 가장 좋은 방법입니다 .
interface IModal {
content: string;
form: string;
//...
//Extra
foo: (bar: string): void;
}
class Modal implements IModal {
content: string;
form: string;
foo(param: string): void {
}
}
다른 방법으로 인터페이스에서 객체를 생성하는 더 쉬운 방법을 제공하더라도 다른 문제에 객체를 사용하는 경우 인터페이스를 분리하는 것이 좋습니다. 인터페이스가 과도하게 분리되지 않습니다.
interface IBehaviour {
//Extra
foo(param: string): void;
}
interface IModal extends IBehaviour{
content: string;
form: string;
//...
}
반면에, 예를 들어 코드를 단위 테스트하는 동안 (문제 분리를 자주 적용하지 않을 경우) 생산성을 위해 단점을 수용 할 수 있습니다. 주로 큰 타사 * .d.ts 인터페이스에 대한 모의 객체를 만들기 위해 다른 방법을 적용 할 수 있습니다. 그리고 모든 거대한 인터페이스에 대해 항상 익명의 객체를 구현하는 것은 고통 스러울 수 있습니다.
이 경로에서 첫 번째 옵션은 빈 객체 를 만드는 것입니다 .
var modal = <IModal>{};
둘째 , 인터페이스의 필수 부분 을 완전히 실현하십시오 . 타사 JavaScript 라이브러리를 호출하는지 여부에 유용 할 수 있지만 이전과 같이 클래스를 대신 만들어야한다고 생각합니다.
var modal: IModal = {
content: '',
form: '',
//...
foo: (param: string): void => {
}
};
셋째 , 인터페이스 의 일부만 만들고 익명의 개체를 만들 수 있지만이 방법으로 계약을 이행해야합니다.
var modal: IModal = <any>{
foo: (param: string): void => {
}
};
인터페이스가 JavaScript 코드로 변환되지 않기 때문에 인터페이스가 선택 사항이더라도 내 대답을 요약하면 TypeScript는 현명하고 일관되게 사용되는 경우 새로운 수준의 추상화를 제공합니다. 나는 당신이 자신의 코드에서 대부분의 경우에 그것들을 기각 할 수 있다고 생각해서는 안됩니다.