Saltar al contenido

Describir el objeto de propiedad en la interfaz de TypeScript

Te sugerimos que revises esta resolución en un entorno controlado antes de pasarlo a producción, un saludo.

Solución:

Finalmente, creo que mi segunda variante fue correcta.

interface ISome 
  strProp:string;
  complexProp:
    [someStrKeyWhichIsDynamic:string]:
      value:string;
      optValue?:string;
    
  ;

para dinámica key solo puedes escribir [dynamic:string] para especificar que aquí habrá algunos string propiedad. Parece que tuve un error de webstorm que no estaba relacionado con el problema.

Por cierto, si tienes algunos string enumeración basada, es posible que desee utilizar [key in MyEnum]: ... en vez de [key:string]. Eso resuelve el error:

TS1337 un tipo de parámetro de firma de índice no puede ser un tipo de unión.

Y si tienes un objeto literal, por ejemplo
const obj = prop1: 'blah', prop2: 'blahblah'

Es posible que desee utilizar [key in keyof typeof obj]: ... para describir que su dinámica key puede ser solo 'prop1' o 'prop2' (o, más genérico, valor de Object.keys(obj) )

No hay nada malo con tus primeros dos ejemplos. Ambos compilan bien y quieren decir lo que dicen.

En su tercer ejemplo, aparentemente desea que el nombre de la propiedad sea "dinámico". Pero recuerde, TS opera en tiempo de compilación. En tiempo de compilación, dynamicStrKey todavía no tiene valor. Por lo tanto, no tiene sentido intentar usarlo como un nombre de propiedad en una definición de tipo. No puede definir un artefacto en tiempo de compilación utilizando un valor en tiempo de ejecución.

el código de la segunda parte admite propiedades dinámicas. No puede usarlo con el último, porque el tipo no se emite al código javascript. Creo que le gusta algo a continuación, usando genérico en su lugar. tipos de índice.

interface ISome 
    strProp: string;
    complexProp: 
        [P in K]: 
            value: string;
            optValue?: string;
        
    ;



let foo: ISome<"foo"> = 
    strProp:"foo",
    complexProp:
        foo:
            value:"foo"
        
    
;

let bar: ISome<"bar"> = 
    strProp:"bar",
    complexProp:
        bar:
            value:"bar",
            optValue:""
        
    
;

let foobar: ISome<"foo"|"bar"> = 
    strProp:"foo",
    complexProp:
        foo:
            value:"foo"
        ,
        bar:
            value:"bar",
            optValue:""
        
    
;

// interesting things that use with any|never types
let anything:ISome=
    strProp:"foo",
    complexProp:
;

Puedes sustentar nuestro estudio mostrando un comentario o dejando una puntuación te lo agradecemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada.