Búsqueda de sitios web

¿Typescript no infiere correctamente? (inferir un objeto de un tipo a partir de la unión de objetos en términos de que un campo sea una cadena concatenada)


¿Cómo puedo hacer que TypeScript infiera dentro del alcance de la declaración if que d contiene a, en el siguiente fragmento?

  type Data<NS extends string> = { type: `${NS}/1`; a: string } | { type: `${NS}/2`; b: string };
  const foo = <NS extends string>(name: NS, d: Data<NS>): void => {
    if (d.type === (`${name}/1` as const)) {
      // Property 'a' does not exist on type 'Data<NS>'. Property 'a' does not        _exist on type '{ type: `${NS}/2`; b: string; }'.
      d.a;
    }
  };

El fragmento anterior es análogo al siguiente, que infiere correctamente, pero no contiene constantes de cadena concatenadas (que es lo que necesito):

type Data<NS extends string> = { type: `1`; a: string } | { type: `2`; b: string }
const foo = <NS extends string>(name: NS, d: Data<NS>): void => { 
  if (d.type === (`1` as const)) {
    d.a;
  } 
}