J'ai étendu une nouvelle classe à partir de la classe de base et ajouté quelques propriétés. Comment créer une instance d'une classe dérivée en utilisant une classe de base donnée incluant les propriétés attachées ?
Ce code fonctionne mais convertit le type de classe et n'est pas sécurisé de type
// Base class is imported from a package. Not editable class BaseClass { public x: number; public power() { return this.x * 2; } } export interface CustomClass extends BaseClass { value: number; } function createCustomClass(base: BaseClass, myValue: number): CustomClass { // it's not type safe to cast this variable // How to do it the right way in Typescript? const result: CustomClass = base as CustomClass; result.value = myValue; return result; }
Je ne pense pas qu'il soit possible d'exclure complètement le transtypage en utilisant votre approche, mais si vous utilisez
type Guard
检查变量result
是否有效CustomClass
(在我的实现中是isCustomClass
), ce sera sûr : p>Vous pouvez utiliser la
Object.assign ()
méthode pour ajouter des propriétés à l'objet cible. Cette méthode renvoie l'objet cible et sa signature d'appel dans la bibliothèque TypeScript qui est l'intersection des types d'entrée.Cela signifie que votre
createCustomClass()
peut être mis en œuvre comme ceci :Le type de retour est
BaseClass & {value: number}
,其结构与CustomClass
le même, donc la fonction se compile sans erreurs et il n'y a pas d'assertion de type requise.Lien du code Playground p>