2016-07-12 1 views
0

인터페이스를 구현하거나 클래스를 확장하는 Typescript의 작은 코드 구현이 있습니다. 나는 물론 set 메소드 구현이 public(id: number) { } 할 수IntelliSense의 데이터 유형이 예상되는 숫자 대신 임의의 숫자 인 Typescript 상속

(method) TestExtension.run(id: any): void 
(method) TestImplementation.run(id: any): void 

하지만 난에 왜 내가 보이지 않는 : 나는 유형의 '수'에 의해 ID를 예상 한 위치에

interface ITest { 
    run(id: number): void 
} 

abstract class Test implements ITest { 

    abstract run(id); 
} 

class TestExtension extends Test 
{ 
    constructor() { 
     super(); 
    } 

    public run(id) { } 
} 

class TestImplementation implements ITest { 
    constructor() { 

    } 

    public run(id) { } 
} 

은 모두 잘못된 인텔리을 보여줍니다 이 작업을 수행.

누군가 나를 밝힐 수 있습니까?

답변

0

implements ITest에 대한 귀하의 이해가 정확합니다. TypeScript 인터페이스 구현은 다른 언어와 같지 않습니다. 클래스 구성원이 인터페이스 정의와 호환 가능해야한다는 것은 순전히 컴파일 시간 계약 정적입니다. 다음과 같은

가 정확한지 :

let foo: number; 
let bar; // inferred any 
foo = bar; 

다음은

interface IFoo { 
    foo: number 
} 
class Foo implements IFoo { 
    foo; // Inferred any 
} 

명시 적으로 서명없이 인수가 코드도 어느입니다 기능

수정

정확

명시 : public run(id) { } ~ public run(id: number) { } 컴파일러에서 컴파일러가이 케이스를 캐치하도록하려면 noImplicitAny으로 선택적으로 컴파일하십시오.

+0

볼 수 있지만 구현이없는 추상 클래스와 추상 메소드가 여전히 이상하다고 생각하지는 않습니다. 확장 클래스? 내가 타이프 스크립트에 대해 조금 다른 생각을해야합니다. – Lostfields