2017-03-09 1 views
8

나는 nodejs/typescript 2 프로젝트를 가지고 있으며 es6-promise 패키지를 사용합니다. 이제 typescript에서 ES6을 직접 타겟팅 할 수 있으므로 추가 패키지를 제거하고 싶습니다.ES6 Promise/Typescript 및 Bluebird 약속

그래서 es6-promise 패키지를 제거하고 es6을 대상으로 tsconfig.json을 변경했습니다.

{ 
    "compilerOptions": { 
    "target": "es6", 
    // ... 
    } 
} 

많은 제 3 자 패키지는 블루 버드의 약속을 사용하지만 기본 ES6는 GitHub의

S o 다음 오류가 발생합니다.

TS2322 : '블루 버드'유형을 '약속'유형에 지정할 수 없습니다. 'Bluebird'유형에 '[Symbol.toStringTag]'속성이 없습니다.

npm @types/bluebird-global에 다른 유형 패키지가 있습니다. 블로그 게시물 중 하나에서 사용자가 @types/bluebird 대신에 사용하도록 권장하지만 일부 타사 패키지 (예 : sequelize typings) 참조 bluebird 및 bluebird-global이 아니므로 bluebird의 누락 된 입력에 대해 다른 오류가 발생합니다.

이 기능을 작동시키는 좋은 해결책은 무엇입니까?

+0

'bluebird-patch.d.ts' 파일에'인터페이스 Bluebird {[Symbol.toStringTag] : string}'을 넣으려고 할 수 있습니까? – Paleo

+0

감사하지만 이것은 나를 위해 작동하지 않습니다. – dknaack

+0

결국이 패키지는 Bluebird 약속을 반환하므로 Bluebird 패키지 및 정의 파일을 프로젝트에 포함해야합니다. "이름 바꾸기"블루 버드 약속 약속 "약속"네이티브 약속은 정말 혼란스러워 할 수 있습니다. (심지어 그들은 동일한 API를 가지고 있습니다.) 플러스 나는 이것을 어떻게해서든지 보지 못합니다. :) – deKajoo

답변

0

Bluebird에는 [Symbol.toStringTag]이 없으므로 실제로 호환되지 않습니다. 기본 약속에서 블루 버드 구현 차이가 다른 일이있다 - 스케줄러, 오류 처리가 ...이 처리하는 올바른 방법은 다음과 같습니다 런타임 호환성이 있는지에 대한 문제가되지 않습니다

const promise: Promise<type> = Promise.resolve<type>(bluebirdPromise); 

경우, 이것은 유형으로 해결할 수 있습니다

const promise: Promise<type> = <Promise<type>><any><Bluebird<type>>bluebirdPromise; 

또는

const promise: Promise<type> = <Promise<type>><PromiseLike<type>>bluebirdPromise; 
0

내가

처리되었습니다 상대적으로 입력 안전한 방법으로 캐스팅 0

TS2322 : '블루 버드'유형을 '약속'유형에 지정할 수 없습니다. 'Bluebird'유형에 '[Symbol.toStringTag]'속성이 없습니다.

와 스레드 발견 https://github.com/DefinitelyTyped/DefinitelyTyped/issues/10801

는 TL; DR 단계; 버전은 다음 중 하나를 수행하는 것입니다.

  1. 각각에서.

    import * as Bluebird from 'bluebird';

    declare global { export interface Promise<T> extends Bluebird<T> {} }

또는

파랑새 약속
  • 랩의 모든 약속
      을 : TS 입력 파일은 글로벌 약속을 덮어에 다음 사항을 추가 건설자. 일부 런타임 오버 헤드가 있으며 Bluebird의 사이트에 반 패턴으로 표시됩니다.

    제쳐두고 나는 두 번째 옵션을 사용할 수 없지만 처음에는 제대로 작동했습니다.

  • 관련 문제