2016-11-25 1 views
1

je la fonction suivante:signature de la fonction Validation - Interface de type alias vs

function (n: number) { 
    return {s: n}; 
} 

Je dois créer un validateur pour la signature. D'après ce que je l'ai lu, j'ai deux options:

Interface

interface ValidatorFnInterface { 
    (n: number): { 
     [key: string]: any; 
    }; 
} 

alias Type

type ValidatorFnType = (n: number) => { 
    [key: string]: any 
}; 

Et ils peuvent être utilisés comme ceci:

let f1: ValidatorFnInterface = function (n: number) { 
    return {s: n}; 
}; 

let f2: ValidatorFnType = function (n: number) { 
    return {s: n}; 
}; 

Tapote lib.d.ts semble utiliser des alias de type, alors que le code angular2 semble utiliser une interface. Ma question est de savoir quand utiliser quoi? Y a-t-il une logique que je devrais utiliser pour décider ou est-ce une question de préférence?

Répondre

3

Actuellement, les classes de TypeScript ne peuvent implémenter que des types interfaces non arbitraires. Donc, en général, si vous voulez que d'autres classes puissent utiliser vos types en implémentation, vous devez utiliser des interfaces. De même ne peut interfaces que extend autres interfaces. Du côté négatif pour les interfaces, ils ne peuvent pas exprimer les types d'intersection ou d'union, donc si vous voulez que dans un seul type vous êtes coincé avec des alias de type.

+0

merci, alors qu'est-ce que vous dites que vous vous en tiendriez à des interfaces pour la validation des signatures de fonctions? –

+0

@Maximus Cela dépend de vos besoins. Personnellement, j'aime exprimer mes types avec des alias de type parce qu'il se sent plus propre. Mais les interfaces sont probablement un pari plus sûr, et plus réutilisable. – Alex

+0

merci. L'alias de type est-il apparu plus tard dans la langue que les interfaces? Peut-être que c'est la raison pour laquelle angular2 utilise des interfaces. Aussi, que pouvez-vous dire à propos de [this] (http://stackoverflow.com/questions/13137350/defining-typescript-callback-type#comment47535906_14249517) comment? –