javascript - Hvordan skrive en Kotlinesque utvidelsesfunksjon i Typescript?
I Kotlin hvis jeg har et interface som dette:
interface User {
val name: String
val email: String
}
Jeg kan skrive en utvidelsesfunksjon som dette hvor som helst i koden:
fun User.toUserDto(): UserDto {
TODO()
}
I Typescript hvis jeg har en lignende interface:
export default interface User {
name: string;
email: string;
}
Hvordan kan jeg forsterke det på en lignende måte? Er dette en beste praksis i språket? Finnes det et alternativ til dette som jeg ikke kjenner til?
Svar #1
Du kan utvide klasser slik, men det avhenger av prototype-egenskapen, og det finnes ingen User.prototype (og ingen User-verdi i det hele tatt heller).
Du kan også se denne veldig lange diskusjonen. Forklaringen på hvorfor Kotlin/C#-tilnærmingen ble avvist er her.
Svar #2
Grensesnitt i Typescript kan kun beskrive formen på data, du kan ikke lage instanser av dem eller endre dem.
For å skrive en utvidelsesfunksjon for et grensesnitt, må du implementere grensesnittet i en klasse, og legge til det du trenger på klassen.
export class SomeUserClass implements User {
name: string;
email: string;
constructor(name, email) {
...
}
toUserDto() {
...
}
}
