2017-11-21 26 views
2

외부 종속성이있을 때 새로운 유형을 DefinitelyTyped에 추가하는 방법을 파악하는 데 문제가 있습니다. package.json을 폴더에 추가하지 않으면 모듈을 찾을 수 없기 때문에 테스트를 통과 할 수 없지만 패키지가 허용 목록에 없기 때문에 linter가 전달되지 않습니다. 여기 외부 종속성이있는 DefinitelyTyped에 새 유형을 추가하려면 어떻게해야합니까?

는 풀 요청입니다 : 내가 실제로 사용할 수 있도록 필요한 다른 종속성이 내 테스트에서 또한

https://github.com/DefinitelyTyped/DefinitelyTyped/pull/21581

// index.d.ts 

import { 
    ApolloClient, 
    ObservableQuery, 
    WatchQueryOptions, 
    ApolloError 
} from 'apollo-client'; 

https://github.com/DefinitelyTyped/DefinitelyTyped/pull/21581/files#diff-bedcd6706b6ae7a6f6df5951737dcc31R12

하지만 devDependencies은 아니다 린터에 의해 허용.

은 그래서 package.json없이, 나는 모듈은 '마피아 아폴로'을 (를) 찾을 수 없습니다 "라고 테스트하는 동안 오류가 발생 - 의미가

그래서 나는 package.json 덧붙였다.

을 ... 당신이 화이트리스트를 보면

Error: In /home/travis/build/DefinitelyTyped/DefinitelyTyped/types/mobx-apollo/package.json: Dependency apollo-client not in whitelist; please make a pull request to types-publisher adding it.

그러나, 아주 작은, 그래서 이것은이 문제를 해결하는 적절한 방법이 될 수 없습니다 :

{ 
    "private": true, 
    "dependencies": { 
     "apollo-client": "^2.0.0", 
     "graphql-tag": "^2.0.0", 
     "mobx": "^3.0.0" 
    } 
} 

는 지금은 린터 동안 오류가 발생 네가 부끄러워해야한다면 내가 상상할거야. 의존성이있는 모든 패키지에 대해 elist를 사용하면이 목록이 커질 수 있습니다.

https://github.com/Microsoft/types-publisher/blob/master/dependenciesWhitelist.txt

그래서 내가 여기에 무엇을해야합니까?

답변

2

외부 패키지 종속성은 자체 유형을 정의하는 패키지에만 필요하며 다른 모든 것은 DT 레포에서 직접 컴파일러가 tsconfig.json의 "typeRoots": ["../"]을 통해 찾을 수 있으므로 허용 목록은 일반적으로 가장 짧습니다 DT 자체에서 왔습니다.

*.d.ts 및 테스트 파일을 가져올 때 컴파일러는 JS를 생성하는 대신 형식 정보 만 가져 오므로 실제 패키지는 필요하지 않으며 정의 만 필요합니다. 외부 패키지의 경우 해당 패키지가 합법적 인 의존성은 있지만 여전히 JS가 생성되지는 않습니다 컴파일러 테스트 전용

이 경우에는 apollo-client이 TS로 쓰여지고 자체적으로 배포되므로 허용 목록에 추가하는 것이 올 Y 르게 유효해야합니다 정의

다른 종속성에 대해서는 t 단계 이상인 테스트 케이스에만있는 것처럼 보입니다. 자신의 패키지를 평가할뿐 아니라 MobX의 컨텍스트에서 통합을 테스트합니다. MobX는 이러한 패키지를 가져 오거나 (자신의 유형을 정의한 경우 - mobx) 필요가 없거나 자신의 유형 정의 또는 이미 DT에있는 유형 정의 (예 : graphql-tag). 당신은 그것을 간단하게 유지할 수 있고 테스트 케이스 밖에서 유지할 수 있습니다. 또한 이것들을 최신 상태로 유지해야하는 유지 관리 오버 헤드가 줄어 듭니다.

+0

따라서 존재하지 않고 자체 유형을 정의하는 패키지 DefinitelyTyped에서) 그리고 화이트리스트에 의존성을 추가해야 할 필요가 있습니까? – Paul

+0

그래, 그들은 일반적으로 TS 자체가되는 프로젝트 소스에 의해 생성되기 때문에 손으로 작성한 대안보다 훨씬 정확하고 변동성이 적어 항상 최신 상태가 될 것이므로 DT에있는 사람들보다 바람직합니다. 이 경우 패키지를 허용 목록에 추가 할 필요가 없습니다. – alechill