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

207
Views
Cómo implementar una interfaz con tipos condicionales en TypeScript

En un proyecto personal, tengo un problema con los tipos condicionales de TypeScript. Tengo una comprensión básica de los tipos condicionales de los documentos de TypeScript. Espero que la configuración a continuación funcione, pero da un error de tipo.

Básicamente, estoy tratando de definir una interfaz para un nodo de árbol que se carga desde el disco. Esto significa que es posible que algunos de los nodos no se carguen correctamente debido a la falta de archivos, etc. Por lo tanto, cualquier implementación de nodo contiene Content o Error .

 interface Content { data: number; } interface Error { code: string; } export interface TreeNode<T extends Content | Error> { getValue(): T extends Content ? number : string; } class ValueNode<ValueType extends Content> implements TreeNode<ValueType> { private readonly value: number; public constructor(value: number) { this.value = value; } public getValue(): number { return this.value; } }

Esperaría que la implementación del método getValue pueda devolver string ya que la interfaz se implementa con el tipo que extiende Content . Pero me sale este tipo de error en lugar:

  • La propiedad getValue en el tipo ValueNode<ValueType> no se puede asignar a la misma propiedad en el tipo base TreeNode<ValueType> .
    • Tipo () => number no se puede asignar a tipo () => ValueType extends Content ? number : string .
      • El number de tipo no se puede asignar al tipo ValueType extends Content ? number : string

Claramente, lo estoy haciendo de la manera incorrecta. ¿Cuál sería la forma correcta de lograr mi objetivo?

about 4 years ago · Santiago Gelvez
1 answers
Answer question

0

Como señaló @Dai, es mejor no sombrear el tipo de Error incorporado (para que pueda usarlo en su módulo).

Aquí hay dos alternativas:

Enlace de juegos TS

 interface ContentValue { data: number; } interface ErrorValue { code: string; } export interface ValueGetter<T> { getValue(): T; } class ValueNode<T extends ContentValue> implements ValueGetter<ContentValue['data']> { public constructor(private readonly value: T) {} public getValue(): number { return this.value.data; } } // or class SimpleValueNode<T extends ContentValue> { public constructor(private readonly value: T) {} public getValue(): number { return this.value.data; } }
about 4 years ago · Santiago Gelvez 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!