2014-06-09 2 views
0

이것이 구현되지 않은 이유는 무엇입니까? 많은 속성을 가진 객체를 만들기 위해 노력하고 있지만, 같은 유형의 객체 모두를 만들려고합니다. 그러나 인터페이스가 작동하지 않습니다. Index sigatures of types 'Foo' and 'StringKey' are incompatible.typescript 클래스로 구현되지 않은 주요 인터페이스

interface StringKey { 
    [key: string]: number; 
} 

class Foo implements StringKey { 
    public Foo1 = 1; 
    public Foo2 = 2; 
    public Foo3 = 3; 

    constructor() { 
    } 
} 

답변

1

이러한 인터페이스는 클래스에 의해 명시 적으로 구현 될 수 없습니다. this discussion을 참조하십시오.

+0

감사합니다. 조금 어색하지만 해결할 것입니다. – Tim

1

당신은 개체 사용하여 구현할 수 있습니다 : 당신이 숫자가 아닌 속성을 추가하려고하면

interface StringKey { 
    [key: string]: number; 
} 

var example: StringKey = { 
    Foo1: 1, 
    Foo2: 2 
}; 

이 컴파일러는 경고합니다 : 비록

interface StringKey { 
    [key: string]: number; 
} 

var example: StringKey = { 
    Foo1: 1, 
    Foo2: 4, 
    Foo3: 'string' // ERROR! 
}; 

을,이 의지 인터페이스에 명명 된 속성이 지정되어 있지 않으므로 example.blah에 직접 액세스하지 마세요. 다음을 사용해야합니다.

// x is known to be a number 
var x = example["Foo1"]; 

유형이 실제로 동적이지 않은 경우 문자열 인덱서에서 확인되지 않은 오타가 발생하지 않기 때문에 직접 속성 액세스가 바람직 할 수 있습니다. 그러나이 경우에는 적용되지 않을 것으로 예상됩니다. 그렇지 않으면 질문하지 않았을 것입니다.

var example = { 
    Foo1: 1, 
    Foo2: 2 
}; 

// x is known to be a number 
var x = example.Foo1; 
관련 문제