Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

202
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!