Búsqueda de sitios web

angular - Advertencias de Angular2 al exportar interfaces desde un archivo propio


Tengo aproximadamente 5 interfaces que estoy exportando y necesito usar en múltiples componentes. Todas estas interfaces están relacionadas, ya que cada una de ellas incluye o hace referencia a una de las otras como un arreglo de datos.

Aquí hay un ejemplo:

export interface ParentData {
    UIVersion: number;
    VersionID: number;
    Rule: RuleData[];
}

export interface RuleData {
    RuleParentID: number;
    RuleVersionID: number;
    MappedValue: number;
    ProcessingOrder: number;
    KeyID: number;
    Value: string;
    IsRuleRetired: boolean;
    UserImpactCount: number;
    Attribute: AttributeData[];
}

export interface AttributeData {
    AttributeID: number;
    AttributeName: string;
    OperatorID: number;
    OperatorName: string;
    SQLOperator: string;
    AttributeValue: ValueData[];
}

export interface ValueData {
    RuleDetailID?: number;
    AttrValue: number;
    Value: string;
    IsValueRetired: boolean
}

Creé un archivo de interfaz donde incluí todos estos y luego los importé en mis componentes que los usan.

Al hacer esto, obtengo errores/fallos de compilación diciendo que faltan o que no tienen un miembro exportado.

Sin embargo, si incluyo los 5 de ellos como en el ejemplo en cada componente individualmente, se compila, solo lanza advertencias como "export 'ValueData' no se encontró en './../../../example.component.

¿Hay algún problema con exportar interfaces que se refieren entre sí, estando contenidas en su propio archivo e importadas en el componente?

ACTUALIZACIÓN:

Reinicié el servidor después de eliminar todas las interfaces basadas en componentes y reemplazarlas por el archivo de importación. Se compiló con éxito; sin embargo, recibo una advertencia por cada interfaz que está incluyendo un arreglo de otra interfaz.

exportar 'ValueData' no se encontró en exportar 'AttributeData' no se encontró en exportar 'RuleData' no se encontró en

Supongo que esto podría ignorarse por ahora suponiendo que las definiciones realmente estén ahí y que TypeScript solo esté comportándose de manera extraña..

ACTUALIZACIÓN 2:

¿Estas advertencias pueden ser porque no estoy inicializando el arreglo?

@Input() parentRuleData: RuleData; // Rules Data

ngOnInit() {
    this.ruleFormGroup = this.toFormGroup(this.parentRuleData);
}   

private toFormGroup(data: RuleData) {
    const formGroup = this._fb.group({
        RuleParentID: [ data.RuleParentID ],
        RuleVersionID: [ data.RuleVersionID ],
        MappedValue: [ data.MappedValue],
        ProcessingOrder: [ data.ProcessingOrder ],
        KeyID: [data.KeyID ],
        Value: [data.Value],
        IsRuleRetired: [data.IsRuleRetired],
        UserImpactCount: [data.UserImpactCount]
    });

    return formGroup;
}

Sin embargo, si cambio el Input a @Input() parentRuleData: RuleData[]=[]; así como el toFormGroup(data: RuleData) a toFormGroup(data: RuleData[]), los métodos ngOnInit y toFormGroup generan errores:

Argument of type 'RuleData[]' is not assignable to parameter of type 'RuleData'.

Respuesta #1

En tu última interfaz te falta punto y coma

export interface ValueData {
    RuleDetailID?: number;
    AttrValue: number;
    Value: string;
    IsValueRetired: boolean; <----
}

Además, parece un problema conocido

https://github.com/angular/angular-cli/issues/2034