TypeScript 설명서에 설명 된대로 추가 방법을 추가하여 Promise를 보완하려고합니다. Global augmentation.새로운 Promise (...)에 대한 Promise 중단 유형 추론
그리고 시험 1에서 잘 작동하지만 약속 2. 타이프 라이터가 Promise<boolean>
으로 유형을 추론을 중지하고 대신 Promise<{}>
로 추론 시험에서 생성자를 사용하여 만든 몇 가지 이유가 형식 유추를 나누기. 내 기능 보강을 제거하면 생성자를 사용하여 생성 된 Promise
의 제네릭 유형이 올바르게 추정됩니다.
왜 그런 일이 일어나고 그것을 어떻게 수정해야 하나?
// src/test.ts
// augmentation
interface Promise<T> {
myCustomMethod(): T;
}
// test 1
let data: number = Promise.resolve(42)
.then((value) => value + 4)
.myCustomMethod();
// test 2
let p2: Promise<boolean> = new Promise((resolve) => {
resolve(true);
})
그리고 내 설정 : 내가 갖는
// tsconfig.json
{
"compilerOptions": {
"module": "es6",
"target": "es6",
"baseUrl": "./src"
}
}
오류입니다 : 여기
내가 할 노력하고있어의 간단한 예입니다src/test.ts(9,5): error TS2322: Type 'Promise<{}>' is not assignable to type 'Promise<boolean>'.
Type '{}' is not assignable to type 'boolean'.
UPD
그 유형은 항상 테스트 2에 대해 Promise<{}>
으로 추측됩니다. 그러나 이제는 이해할 수 없습니다. 왜이 오류가 내 기능 보강없이보고되지 않습니다. Type '{}' is not assignable to type 'boolean'.
부터이 기능을 사용하지 않아도 오류가 나타나지 않아야합니까?
의도적인지 또는 TypeScript 개발자에게보고해야하는지 이해하려고합니다.
덕분에 (? 당신이 해결되지 않은 약속을
myCustomMethod()
를 호출 할 때, 어디 그것은 반환해야T
값을 얻을 것이다) 당신의 약속을 구성 할 때하나는 명시 적으로 일반적인 인수를 그렇게, 또는 사용하지 않는 당신이 대답하고 해결 방법. 업데이트 된 질문을 살펴보십시오. 내 증원없이 왜 오류가 나타나지 않는지 자세히 설명해 주시겠습니까? –
가 있기 때문에 확대하지 않고,'https://www.typescriptlang.org/docs/handbook/type-compatibility.html# (T'는 함수 인수 유형으로 Promise''에 표시하고, 타이프 라이터는 [기능 호환성 규칙]을 가지고 '(boolean)'이'{} '에 할당 될 수 있기 때문에'function (x : {})'를'function (x : boolean)'과 호환 가능하게 만드는 함수 인자 - 변수 쌍성. 반환 값으로'T'를 쓰면'{}'를'boolean'에 할당 할 수 없으므로 호환되지 않습니다. – artem
여기 (https://www.typescriptlang.org/play/#src=var%20f1%20%3D%20function%20 (X % 3A % 20boolean) % 3A % 20void이 [함수 타입 호환성을 보여주는 예]는 % 20 % 3B %의 0D % 0Avar % 20f2 % 20 % 3 차원 % 20function 20 % (X %의 3A의 % 20 %도 7B %의 7D) % 3A % 20void % 20 %도 7B % 20 % 7D %의 3B % 7B % 20 % 7D %의 0D %의 0Af1 % 20 % 3 차원 %의 20f2 %의 3B % 20 % 2F % 2F % 20ok % 0D % 0Af2 % 20 % 3 차원 %의 20f1 % 3B % 20 % 2F % 2F % 20ok % 0D % 0A가 된 %의 0D % 0Avar % 20f3 % 20 %의 3D % 20function 20 %() % 3A % 20boolean % 20 %도 7B % 20return % 20true % 7D %의 3B %의 0D % 0Avar % 20f4 % 20 % 3 차원 % 20function 20 %() %의 3A % 20 %도 7B %의 7D %의 20 % 7B % 20 % 20 % 3 % 20 % 3 % 20 % 3 % 20 % 3 % 20 % 3 % 20 % 3 % 20 % 20 % 2F % 2F % 20ok % 0D % 0A) – artem