Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
type NetworkLoadingState = {
state: "loading";
};
type NetworkFailedState = {
state: "failed";
code: number;
};
type NetworkSuccessState = {
state: "success";
response: {
title: string;
duration: number;
summary: string;
};
};
type NetworkState =
| NetworkLoadingState
| NetworkFailedState
| NetworkSuccessState;
function logger(state: NetworkState): string {
switch (state.state) {
case "loading":
return "Downloading...";
case "failed":
// The type must be NetworkFailedState here,
// so accessing the `code` field is safe
return `Error ${state.code} downloading`;
case "success":
return `Downloaded ${state.response.title} - ${state.response.summary}`;
default:
return "<error>";
}
}
function main() {
print(logger({ state: "loading" }));
print(logger({ state: "failed", code: 1.0 }));
print(logger({ state: "success", response: { title: "title", duration: 10.0, summary: "summary" } }));
print(logger({ state: "???" }));
print("done.");
}
Ура... радуйтесь.... я вам еще говнокодца поднадкинул... ну и перекопал же говна в коде что бы это сделать. Дампик тут.. https://pastebin.com/u7XZ00LV Прикольно получается если скомпилить с оптимизацией то нихрена от кода не остается. и результат работы
так это же и есть основное нахрена надо TypeScript компилятор ... т..к. код то простейший а на C/C++ надо горы воротить..считай что свой движ туда пишешь
не берется. а вы используете первое поле. просто первое поле по определению самое безопасное т.к. находиться в одном и том же месте для любого похожего типа.
та тут все просто...
у нас union { struct { int t = 0 }, struct { int t = 1, int code }, struct { int t = 2, ... } }. как мы определяем что у нас struct 1, 2 или 3? по полю t которое 0 для struct 1, 1 для struct 2, и 2 для struct 3
Питушня какая-то, читать сложно. Попробуй догадайся, что эти i100500n значат.
Помехоустойчивость тоже падает. Только недавно было какое-то редкое или написанное по ошибке выражение вроде "гулять в хуйцу", его со звёздочками никак не прочитаешь.
P.S. А синонимы - лучший вариант. Слова со звёздочками, написанные, "чтобы дети не видели" либо сразу понятны и детям, и взрослым (например, х*й) - тогда теряется смысл цензуры, либо не понятны сразу никому (например, в х**цу) - тогда теряется смысл сказанного. Синоним же всем понятен и полностью цензурен.
просто safe cast происходит, когда тип может определиться .. а когда мы его может определить? если мы знаем значение поля в типе..(а не данных) или используем typeof
мы используем литерал потому что это гарантирует значение полей . можно использовать любое поле. просто... как тогда "промапить" значение поля к типу если это не "литерал"?
Возможно в момент конпеляции switch'а происходит проверка? Там и state видно и варианты свича с вариантами state можно сопоставить. Наверное лучший момент, чтобы перечисленные тобой пункты проверить.
Главное, чтобы не мертвечиной. Если сей факт поимеет место, возможно две трактовки.
1. этот человек некрофил.
2. этот человек умер и его нюхает патологоанатом-извращуга.
если у них не будет то вы можете юзать только typeof который вернет одно и тоже значение для любого варианта.. т.е. тип перестанет быть полезным но рабочим
ASD__77 # 0
bormand # 0 ⇈
ASD__77 # 0 ⇈
ASD__77 # 0
guest # 0
ASD__77 # 0 ⇈
JaneBurt # 0 ⇈
[email protected] # 0
А код подгружать через интернет умеет?
bormand # 0 ⇈
ASD__77 # 0 ⇈
JaneBurt # 0 ⇈
Алсо было бы хорошо в свой вариант TS-а добавить потоки, в которых можно выполнять произвольную функцию (а не только прибитый гвоздями fetch и т.д.).
ASD__77 # 0 ⇈
bormand # 0 ⇈
Эм, а web worker'ов нельзя ждать await'ом? Они, конечно, не полноценные треды, но всё равно что-то могут посчитать...
JaneBurt # 0 ⇈
const executable = await fetch(...);
const lib = dl.install(executable);
const res = lib.run("someFunc", [param1, ..., paramN]);
```
JaneBurt # 0
CHayT # 0
bormand # 0 ⇈
ASD__77 # 0 ⇈
bormand # 0 ⇈
ASD__77 # 0 ⇈
ASD__77 # 0 ⇈
bormand # 0 ⇈
ASD__77 # 0 ⇈
у нас union { struct { int t = 0 }, struct { int t = 1, int code }, struct { int t = 2, ... } }. как мы определяем что у нас struct 1, 2 или 3? по полю t которое 0 для struct 1, 1 для struct 2, и 2 для struct 3
ASD__77 # 0 ⇈
bormandinho # 0 ⇈
bormand # 0 ⇈
Нет.
JaneBurt # 0 ⇈
bormand # 0 ⇈
1024-- # 0 ⇈
Питушня какая-то, читать сложно. Попробуй догадайся, что эти i100500n значат.
Помехоустойчивость тоже падает. Только недавно было какое-то редкое или написанное по ошибке выражение вроде "гулять в хуйцу", его со звёздочками никак не прочитаешь.
P.S. А синонимы - лучший вариант. Слова со звёздочками, написанные, "чтобы дети не видели" либо сразу понятны и детям, и взрослым (например, х*й) - тогда теряется смысл цензуры, либо не понятны сразу никому (например, в х**цу) - тогда теряется смысл сказанного. Синоним же всем понятен и полностью цензурен.
bormand # 0 ⇈
CHayT # 0 ⇈
bormand # 0 ⇈
Desktop # 0 ⇈
bormand # 0 ⇈
gEKA6PbCKuu_nemyx # 0 ⇈
bormand # 0 ⇈
bormand # 0 ⇈
gEKA6PbCKuu_nemyx # 0 ⇈
bormand # 0 ⇈
gEKA6PbCKuu_nemyx # 0 ⇈
bormand # 0 ⇈
1024-- # 0 ⇈
Desktop # 0 ⇈
gEKA6PbCKuu_nemyx # 0 ⇈
Это тебе что, залупа конская на солнце светится или лоб пидора Сракера, за дела наши блядские лоб расхуячившего, а ты при нём «под..чить»?
А это тебе кто, потаскуха малолетняя или bormand, греха не знающая, хуя во рту не державшая, а ты при ней «под..чить»?
Марш на третью полку и не дрочить до Питера!
j123123 # 0 ⇈
ASD__77 # 0 ⇈
ASD__77 # 0 ⇈
bormand # 0 ⇈
Но тогда кастовать надо будет явно, автоматика уже не сработает т.к. нету однозначно подходящего типа?
ASD__77 # 0 ⇈
bormand # 0 ⇈
MaaKut # 0 ⇈
OMuKPOH # 0 ⇈
1. этот человек некрофил.
2. этот человек умер и его нюхает патологоанатом-извращуга.
ASD__77 # 0 ⇈
CHayT # 0 ⇈
guest # 0 ⇈
CHayT # 0 ⇈
bormand # 0 ⇈
guest # 0 ⇈
bormand # 0 ⇈
guest # 0 ⇈
bormand # 0 ⇈
guest # 0 ⇈
будет или NetworkState или any, смотря что еще провериш