Typescript-kompilatorn kan inte härleda typen från ett Promise-resolve-anrop
När du använder följande kodsnutt kan kompilatorn inte identifiera typerna för item1, den kommer att tilldela som okänd (se när du hovrar över variabelnamnet på Typescript Playground)
Varför kan inte TypeScript-kompilatorn härleda att typen kommer att vara en sträng?
const getItem = () =>
new Promise((resolve) => {
return resolve('a title');
});
(async function() {
const item1 = await getItem();
const item2 = await getItem();
})();
Svar #1
Problemet är att typen av Promise inte kan härledas från typen som skickas till resolve-metoden. Resolve-metoden får sin typ från den generiska typ som skickas till Promise-konstruktorn, inte tvärtom. Dessutom behöver du inte använda return med resolve i det här fallet.
Du kan ta itu med detta på ett av två sätt.
- Du bör skicka
stringsom den generiska typparametern. AnvändPromise<string>((resolve) => { ..., vilket kommer att tala om för TypeScript att du förväntar dig att en sträng skickas tillresolve-funktionen. Du kommer att se ett typfel om du försöker kallaresolvemed något annat. - Du kan använda en konstruktion som
Promise.resolve('a title');om du egentligen inte väntar på något och bara vill lägga in en sträng i ett löfte. På det sättet kan den generiska typparametern härledas.