#typescript #visual-studio-code
#typescript #visual-studio-code
Вопрос:
Существует ли какое-либо соглашение об именовании, или редактирование фрагментов, или какое-либо расширение VS code, или какие-либо библиотеки NPM, чтобы помечать методы переопределения тегов в typescript. Это полезно при просмотре кода.
Точно так же, как переопределить синтаксис в Java
@override << ###### SOMETHING like this ######
@public String toString(){
// your overridden code.
return something;
}
Ответ №1:
override
Ключевое слово было добавлено в TypeScript 4.3, как вы можете видеть здесь.
Пример использования:
class SomeComponent {
show() {
// ...
}
hide() {
// ...
}
}
class SpecializedComponent extends SomeComponent {
override show() {
// ...
}
override hide() {
// ...
}
}
Чтобы сделать его обязательным, вы можете установить noImplicitOverride
true в вашем tsconfig.
Комментарии:
1. Как ни странно, это, похоже, не работает при реализации интерфейса
2. @alex-jesper Ваш случай отличается. Изменение метода интерфейса приведет к ошибкам в реализующих его классах (если ваш метод a () теперь называется b (), вам придется реализовать метод b в своих классах). То же самое неверно, если вы изменяете метод суперкласса без ключевого слова в переопределении. Проверьте ссылку для получения дополнительной информации
3. Конечно. Но все равно было бы уместно указать, переопределяет ли метод в реализующем классе метод или нет. Вот как это работает, например, в Java.
Ответ №2:
На данный момент нет переопределяющего ключевого слова или декоратора, но вы можете написать свой собственный декоратор:
const override = < Sup >( sup : { prototype : Sup } ) => <
Field extends keyof Sup ,
Proto extends { [ key in Field ] : Sup[ Field ] } ,
>(
proto : Proto ,
field : Field ,
descr : TypedPropertyDescriptor< Sup[ Field ] > ,
)=> {}
И используйте его следующим образом:
class Super {
myMethod():void {
console.log("Super")
}
}
class A extends Super {
@override(Super)
myMethod():void {
console.log("A")
}
}
Взято с github.