0
votes

Comment puis-je annoter des objets imbriqués avec des interfaces pour la vérification de la configuration?

était à la recherche de TypeScript Pour vérifier le type de fichier dans un fichier de configuration, comme ci-dessous:

interface IConfig {
    host: string;
    port: number;
}

const _config = {
    local: { // <-- I would like to annotate this object with type IConfig
        host: 'localhost',
        port: 1234
    },
    dev: { // <-- I would like to annotate this object with type IConfig
        host: 'https://dev.myapp.com',
        port: 80
    },
    prod: { // <-- I would like to annotate this object with type IConfig
        host: 'https://prod.myapp.com',
        port: 80
    },
}

export const config = _config[process.env.NODE_ENV || 'dev'];


0 commentaires

4 Réponses :


1
votes

Avez-vous essayé d'utiliser une interface pour l'objet de configuration lui-même? Afin que vous puissiez faire quelque chose comme xxx


1 commentaires

Merci! Voir aussi mon autre réponse



0
votes

Une solution possible consiste à annoter l'objet parent: xxx


0 commentaires

1
votes

Vous pouvez utiliser une signature d'index et fournir une interface pour la configuration complète.

interface Environment {
    host: string;
    port: number;
}

interface Config {
    [name: string]: Environment;
}

const _config: Config = {
    local: {
        host: 'localhost',
        port: 1234
    },
    dev: {
        host: 'https://dev.myapp.com',
        port: 80
    },
    prod: {
        host: 'https://prod.myapp.com',
        port: 80
    },
}

export const config = _config[process.env.NODE_ENV || 'dev'];


1 commentaires

Il semble que la solution la plus élégante parmi celles fournies (pour l'instant)



1
votes

Pour plus de ta type de sécurité, je le recommanderais à la place. Nous pouvons utiliser Type Alias ​​ à Télépositions fournies pour hôte . xxx

Si vous le souhaitez, vous pouvez même déclarer des alias de type pour le nom de vos configs ( local < Code> dev , prod )


0 commentaires