2016-08-06 5 views
0

인스턴스화 방법에 따라 정의가 다른 JS 클래스의 DefinitelyTyped TS 정의 파일을 구현하려고합니다. 정의는 잘 정의되어 있으며 인스턴스화 후에 변경되지 않습니다.
예 : 명확한 설명 :
EDIT 크게 감사합니다 모든 포인터가 될 것인스턴스에 따라 속성이 변경되는 클래스에 대한 TypeScript 정의 파일은 어떻게 만듭니 까?

interface myInterface{ 
    c:string; 
} 
class MyClass("foo") implements myInterface{ 
    a:string; 
    b:string; 
    c:string; 
} 
class MyClass("bar") implements myInterface{ 
    c:string; 
    d:string; 
    e:string; 
    f:string; 
} 

:

var a = new MyClass("foo"); 
console.log(a.a);//"a" 
console.log(a.b);//"b" 
console.log(a.c);//"c" 
console.log(a.d);//"undefined" 
console.log(a.e);//"undefined" 
console.log(a.f);//"undefined" 

var b = new MyClass("bar"); 
console.log(b.a);//"undefined" 
console.log(b.b);//"undefined" 
console.log(b.c);//"c" 
console.log(b.d);//"d" 
console.log(b.e);//"e" 
console.log(b.f);//"f" 

내가 같은 TS 정의 뭔가 싶습니다 나는 또한 MyClass
을 수정할 수 없습니다를,있다 MyClass을 인스턴스화하는 여러 가지 다른 방법이 있지만 모두 미리 알고 미리 정의되어 있습니다. 우리는 또한 MyClass의 존재하지 않는 변형의 경우에 대해 걱정할 필요가 없다고 가정 할 수 있습니다.
또한 MyClass은 데이터베이스에 대한 액세스를 허용하는 팩토리로 가장 잘 설명됩니다. 그래서 new MyClass("foo") 당신이 코드를 제어 할 경우 필드 이름이 이제 만들어 MyClass 객체

+2

다른 경우 왜 동일한 클래스입니까? 왜 두 개의 다른 클래스를 만들지 않습니까? – Alex

+0

'class MyClass ("foo") 구문은 myInterface {'가 올바르지 않습니다. –

+0

'd ?: string;'처럼 물음표 ('?')를 찾으셨습니까? –

답변

-1

의 재산 데이터베이스에있는 foo는 테이블에 액세스 할 수있는 개체를 ... 만들 것

수정하는 것이 좋습니다. 여러분이 설명하는 것은 두 가지 다른 유형입니다. 클래스를 입력 매개 변수에 따라 유형을 변경하게하는 것은별로 중요하지 않습니다.

예에서 MyClass은 개체를 만드는 메서드 대신 생성자를 사용하는 이상한 팩터 리처럼 보입니다.

코드의 솔루션은 노동 조합의 유형과 종류 가드 사용하여 다음과 같이 보일 수 있습니다 :

class Foo { 
    public FooMember: string = "I'm foo"; 
} 

class Bar { 
    public BarMember:string = "I'm bar"; 
} 

let myObj: Foo | Bar; 

myObj = new Foo(); // or FooBarFactory.GetInstance("Foo") or whatever 

if(myObj instanceof Foo){ 
    console.log(myObj.FooMember); 
} else { 
    console.log(myObj.BarMember); 
} 

당신이 코드를 제어 할 수없는 경우 ...

을 ... 당신에게 기본적으로 생성자에 대한 입력에 따라 다르게 입력하는 것과 관련하여 운이 없다. 클래스의 생성자를 입력하여 클래스의 유형 이외의 다른 것을 반환 할 수는 없습니다.