我學過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>
}
}
uj5u.com熱心網友回復:
之所以這樣輸入,是因為該函式支持提供回呼cb或回傳承諾。
// typeof e is PokemonResults
fetchPokemon("", (e => console.log(e)));
// typeof e is PokemonResults
fetchPokemon("")?.then(e => console.log(e));
它回傳一組 json 資料。那么為什么不是 Promise<PokemonResults[]> 呢?為什么沒有陣列?
它似乎沒有回傳一個陣列。根據您的問題,它會回傳一個具有 list 的 PokemonResults results。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/433650.html
標籤:javascript 打字稿 反应式
