La méthode de sortie permettant de définir des fonctions de type basées sur des conditions dans TypeScript
P粉764836448
P粉764836448 2023-08-14 18:18:08
0
1
538
<p>J'essaie de définir un type de sortie pour ma fonction et je souhaite utiliser l'indicateur <code>toNumberIfNeeded</code> entre le <code>string</code> /code> types Définit les conditions entre, en supposant que si <code>toNumberIfNeeded</code> est vrai, cette fonction renverra un type numérique, sinon elle renverra un type de chaîne. Que dois-je faire? </p> <pre class="brush:php;toolbar:false;">Options d'interface { majuscule ? : booléen ; filterSpecialChars?: booléen; toNumberIfNeeded? : booléen ; } export const textTransformer = (texte : chaîne, options ? : Options) => const { majuscules, filterSpecialChars, toNumberIfNeeded} = options || //Mon code logique de traitement retourner àNumberIfNeeded ? parseInt(text) : texte; }</pré> <p>Exemple attendu :</p> <pre class="brush:php;toolbar:false;">textTransformer('hello'); // Type de chaîne de retour textTransformer('123', { toNumberIfNeeded: true }); // Renvoie le type numérique</pre>
P粉764836448
P粉764836448

répondre à tous(1)
P粉878542459

Vous pouvez refactoriser textTransformer() 方法,接受一个泛型参数,并使用条件类型来检查 toNumberIfNeeded 是否为 truefalse。我认为 TypeScript 无法自动缩小返回值的类型。你必须使用类型断言,否则返回类型将被推断为 string | number.

interface Options {
  uppercase: boolean;
  filterSpecialChars: boolean;
  toNumberIfNeeded: boolean;
}

export const textTransformer = <T extends Options>(
  text: string,
  options?: T
): T["toNumberIfNeeded"] extends true ? number : string => {
  const {uppercase, filterSpecialChars, toNumberIfNeeded} =
    options || {};
  // 我的处理逻辑代码

  return (toNumberIfNeeded ? parseInt(text) : text) as ReturnType<
    typeof textTransformer
  >;
};

textTransformer("hello"); // 推断为 string
textTransformer("123", {
  toNumberIfNeeded: true,
  uppercase: false,
  filterSpecialChars: false
}); // 推断为 number
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal