Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

210
Visualizações
TypeScript + React: intento escribir un componente que acepte dos tipos de accesorios, pero al final solo puedo acceder al accesorio común

Quiero tener un componente Foo que acepte dos tipos de accesorios:

  1. Foo({a: 'a'})
  2. Foo({a: 'a', b: 'b', c:'c'})

donde se requiere {a: 'a'} .

Estos deberían ser inválidos

 Foo({a: 'a', b: 'b'}) // ❌ Foo({a: 'a', c: 'c'}) // ❌

Aquí está mi intento.

 type BaseProps = { a: "a"; }; type VariantPrps = { b: "b"; c: "c"; } & BaseProps; function Foo(props: BaseProps): React.ReactNode; function Foo(props: VariantPrps): React.ReactNode; function Foo(props: BaseProps | VariantPrps) { // I can only access `props.a` inside return <span>{props.a}</span>; } // usage Foo({a: 'a'}) // ✅ Foo({a: 'a', b: 'b', c:'c'}) // ✅ Foo({a: 'a', b: 'b'}) // ❌ Foo({a: 'a', c: 'c'}) // ❌

funciona hasta cierto punto, pero dentro de Foo solo puedo acceder a c b Mi intención es que dentro de ese componente pueda acceder a b y c y verificar si existen o no antes de usarlos. ¿Hay una manera de hacer eso?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Considere este ejemplo:

 import React from 'react' // credits goes to https://stackoverflow.com/questions/65805600/type-union-not-checking-for-excess-properties#answer-65805753 type UnionKeys<T> = T extends T ? keyof T : never; type StrictUnionHelper<T, TAll> = T extends any ? T & Partial<Record<Exclude<UnionKeys<TAll>, keyof T>, never>> : never; type StrictUnion<T> = StrictUnionHelper<T, T> type BaseProps = { a: "a"; }; type VariantPrps = { b: "b"; c: "c"; } & BaseProps; function Foo(props: BaseProps): React.ReactNode; function Foo(props: VariantPrps): React.ReactNode; function Foo(props: StrictUnion<BaseProps | VariantPrps>) { props.a // "a" props.b // "b" | undefined props.c // "c" | undefined // I can only access `props.a` inside return <span>{props.a}</span>; } // usage Foo({ a: 'a' }) // ✅ Foo({ a: 'a', b: 'b', c: 'c' }) // ✅ Foo({ a: 'a', b: 'b' }) // ❌ Foo({ a: 'a', c: 'c' }) // ❌

Patio de juegos

Se le permitió usar solo a propiedad porque es propiedad común para ambos tipos. ver documentos

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda