2016-10-19 3 views
1

파일에 정의 된 클래스 (이 예제에서는 B)가 있고이 클래스는 b.js.flow 파일에 정의되어 있습니다. 나는 그것의 선언과 클래스를 flowtype 연관 가정,하지만 난 그게 방법 flowtype의 내부 클래스 B의 인스턴스를 받아 일부 기능을 사용하려 한 때 불행하게도 다음과 같은 오류 발생했습니다Flowtype 클래스 선언이 구현과 호환되지 않습니다.

b.js:9 
    9:  return this.a.foo(this) 
       ^^^^^^^^^^^^^^^^ call of method `foo` 
    5: export default class B { 
         ^B. This type is incompatible with 
    6: foo(b: B): null; 
      ^B. See: a.js.flow:6 

나는 그것이 treating classes as nominal types에 의한 추측을 . 클래스 구현을이 오류를 막기위한 선언과 연관시킬 수있는 방법이 있습니까?

내가 테스트에 사용 한 파일의 전체 내용이있다 :

a.js :

// @flow 

import type B from './b' 

export default class A { 
    foo(b: B) { 
    return null 
    } 
} 

a.js.flow :

// @flow 

import type B from './b' 

declare export default class A { 
    foo(b: B): null; 
} 

b.js :

(210)
// @flow 

import A from './a' 

export default class B { 
    a: A; 

    bar() { 
    return this.a.foo(this) 
    } 
} 

b.js.flow :

// @flow 

import type A from './a' 

declare export default class B { 
    a: A; 
    bar(): null; 
} 

답변

1

.js.flow 파일은 .js 파일도 흐름에 의해 확인되는 경우 자신의 .js 대응과 나란히 앉아 것은 아니다. 그 의도는 사람들이 (a) 원본 소스 파일을 추출하여 사람들이 자신의 transpile 단계없이 실행할 수 있도록하고 (b) 원래 소스 파일에 .flow 확장자를 추가하여 npm에 흐름 유형 선언을 게시 할 수있게하는 것이 었습니다. 유형이 있으므로 흐름을 유형을 확인할 수 있습니다. flow-typed은 여러 가지 이유로이 방법보다 바람직하지만 이는 별개의 질문입니다.

.js.flow 파일은 이 아니며, .h- 스타일 선언 파일로 사용되어야합니다.입니다. 가장 좋은 해결책은 파일 .js.flow을 삭제하는 것입니다. .js.flow 파일없이 예제를 테스트했을 때 typechecked 파일.

관련 문제