2017-12-31 54 views
1

타이핑을 만들고자하는 기존 Javascript 프레임 워크를 가정하십시오. 그것은 일부 구성원이 생성자를 통해 /에 의해 생성되어 전달되도록 선언 파일에선언 파일에 mixins 설명하기

// File: src/lib/a.js 

function A() { 
    this.isA = true; 
    this.type = 'a'; 
} 

module.exports = A; 

// File: src/lib/b.js 

var A = require('./a'); 
var plugin = require('./plugin'); 

function B() { 
    A.call(this); 
    this.isB = true; 
    this.type = 'b'; 
    plugin(this); 
} 

B.prototype = object.create(A.prototype); 
B.prototype.constructor = B; 

module.exports = B; 

// File: src/lib/plugin.js 

function plugin(obj) { 
    obj.doSomethingFancy = function() { 
    // ... 
    } 
} 

module.exports = plugin; 

어떻게 기술 할 것 B : 자바 스크립트 코드는 Node.js를 모듈, 프로토 타입 상속 및 유지 mixin을 사용?

답변

0

정말이 구분이 필요합니까? 생성자는 항상 해당 멤버를 만듭니다. 따라서 B 유형의 객체가있는 경우 해당 속성이있을 수 있습니다.

예를 들어, doSomethinFancy에 대해했던 것처럼 그 구성원의 이름 앞에 ?이 붙습니다.

class A { 
    public isA: boolean; 
    public type: string; 

    constructor() { 
     this.isA = true; 
     this.type = 'a'; 
    } 
} 

function plugin(obj: any): any { 
    obj.doSomethingFancy = function() { 
     // ... 
    } 
} 

class B extends A { 
    public isB: boolean; 

    // same could be used for optional function arguments 
    public doSomethingFancy?:() => {}; 

    constructor() { 
     super(); 
     this.isB = true; 
     this.type = 'b'; 
     plugin(this); 
    } 
} 
+0

이 질문은 구현에 관한 것이 아니라 주위 선언에 관한 것입니다. 또한 인수를 위해 하위 클래스가 상위 생성자를 호출하지 않기로 결정할 수도 있다고 가정합니다. – ciss

+1

@ ciss 저는 회원들이 생성자에 의해 생성된다는 사실을 전달하는 방법을 알지 못합니다. 멤버가 정의되지 않았을 가능성을 전달하고 싶다면'isA '와 같이'?'접미사를 붙이십시오. 파생 타입이 호출하는 기본 유형 생성자가 아니라면 TS 오류가 발생하지만이 값이 라이브러리 정의 인 경우 외부 라이브러리의 오류를 무시하도록 컴파일러에 지시 할 수 있습니다. –