TS为什么我在获取时不在Promise设置数组



我学习TS,并且看过这段代码。有一个代码是这样的:

type FetchPokemonResult<T> = T extends undefined ? Promise<PokemonResults> : void;

它重新运行一个json数据数组。那么为什么这不是Promise<PokemonResults[]>为什么它没有数组?

代码

interface PokeArr {
name: string;
url: string;
}
interface PokemonResults {
count: number;
next: string;
previous: null;
results: PokeArr[];
};
type FetchPokemonResult<T> = T extends undefined ? Promise<PokemonResults> : void;
function fetchPokemon<T extends undefined | ((data: PokemonResults) => void)>(url: string, cb?: T): FetchPokemonResult<T> {
if(cb) {
fetch(url)
.then(res => res.json())
.then(cb)
return undefined as FetchPokemonResult<T>;
} else {
return fetch(url).then(res => res.json()) as FetchPokemonResult<T>
}
}

这样键入是因为函数支持提供回调cb或返回promise。

// typeof e is PokemonResults
fetchPokemon("", (e => console.log(e)));
// typeof e is PokemonResults
fetchPokemon("")?.then(e => console.log(e));

它重新运行一个json数据数组。那么为什么这不是Promise<PokemonResults[]>为什么它没有数组?

它似乎没有返回数组。根据您的问题,它会返回一个PokemonResults,其中有一个列表results

最新更新