- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
interface Something {
r: number;
g: number;
b: number;
toString: () => string;
}
function main() {
const something = {
r: 11.0, g: 12.0, b: 13.0, toString() {
return "Hello " + this.b;
}
};
const iface = <Something>something;
print(iface.toString());
print("done.");
}
Если это две разные функции, можно просто написать две разные структуры и две разные функции, и никаких проблем.
Можно ли так в тупоскрипте, не знаю.
Вот тут может вызваться iface.toString() из something или something2 верно? Значит, в iface должна быть некая информация о том, какая там структура вхуячена, а это уже анскильное говно как по мне. Но это конечно можно разрулить тем или иным способом, например через крестопарашный "std::variant" или через union с какой-то хуйней, которая б указывала на то, интерпретируем мы это говно как такую или как такую говноструктуру, и на основе этого вызывается то или иное говно
Мне кажется, это можно сделать без RTTI. На этапе компиляции известно, какое поле в какое копировать. Компилятор рассчитает смещения. Указатель на функцию можно хранить как указатель на виртуальный метод.