J'essaie d'appliquer une valeur par défaut à un générique. Mais chaque fois que le générique n'est pas fourni, le générique prend par défaut la valeur donnée en argument. Je veux empêcher cela de se produire. Voici un exemple très simple :
type Data = Record<string, any>
const computeData = <D extends Data = {}>(input: D): D => {
// Does some stuff to input
return input;
}
const res = computeData<{ name: string }>({ name: 'john' })
Dans ce cas, le type de "res" est { name: string }
comme prévu. Mais si le générique n'est pas fourni, j'ai besoin qu'il prenne par défaut le nom de {}
qui est le type donné comme valeur par défaut pour le générique.
const computeData = <D extends Data = {}>(input: D): D => {
// Does some stuff to input
return input;
}
const res = computeData({ name: 'john' })
J'ai simplifié le code pour cet exemple. Je sais que dans le contexte de cet exemple, c'est un peu inutile.
EDIT : Le cas d'utilisation réel est un mocker de réseau qui permet aux utilisateurs d'ajouter des objets pour simuler des requêtes graphql. Je veux leur donner la possibilité de fournir des types de résolveurs. Cependant, s'ils ne fournissent pas les types, ils sont déduits des données initiales transmises - je veux éviter cela.
Erreur de type car l'appel initial au constructeur infère le type pour le générique
Cela fonctionne parce qu'un type explicite est donné lors de l'instanciation de la classe