This PR implements support for discriminated union types, inspired by suggestions in #186 and #1003. Specifically, we now support type guards that narrow union types based on tests of a discriminant property and furthermore extend that capability to switch statements. Some examples:
interface Square {
kind: "square";
size: number;
}
interface Rectangle {
kind: "rectangle";
width: number;
height: number;
}
interface Circle {
kind: "circle";
radius: number;
}
type Shape = Square | Rectangle | Circle;
function area(s: Shape) {
// In the following switch statement, the type of s is narrowed in each case clause
// according to the value of the discriminant property, thus allowing the other properties
// of that variant to be accessed without a type assertion.switch (s.kind) {
case"square": return s.size * s.size;
case"rectangle": return s.width * s.height;
case"circle": return Math.PI * s.radius * s.radius;
}
}
function test1(s: Shape) {
if (s.kind === "square") {
s; // Square
}
else {
s; // Rectangle | Circle
}
}
function test2(s: Shape) {
if (s.kind === "square" || s.kind === "rectangle") {
return;
}
s; // Circle
}
A discriminant property type guard is an expression of the form x.p == v, x.p === v, x.p != v, or x.p !== v, where p and v are a property and an expression of a string literal type or a union of string literal types. The discriminant property type guard narrows the type of x to those constituent types of x that have a discriminant property p with one of the possible values of v.
Note that we currently only support discriminant properties of string literal types. We intend to later add support for boolean and numeric literal types.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, AndrewVK, Вы писали:
AVK>>https://github.com/Microsoft/TypeScript/pull/9163
VD>А какое отношение TypeScriptr к дотнету имеет?
Он точно имеет отношение к asp.Net. А там TypeScript интегрирован.
А asp.Net это дотнет. Так, что всё логично
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Serginio1, Вы писали:
S>> Он точно имеет отношение к asp.Net. А там TypeScript интегрирован.
AVK>Это каким же образом он туда интегрирован?
Таким же как и JavaScript. отладка в студии.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Serginio1, Вы писали:
AVK>>>Это каким же образом он туда интегрирован? S>> Таким же как и JavaScript. отладка в студии.
AVK>Какая связь между отладкой в студии и ASP.NET?
Думаю по Tcp/Ip
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
S> Он точно имеет отношение к asp.Net. А там TypeScript интегрирован. S>А asp.Net это дотнет. Так, что всё логично
Для asp.Net у нас, вроде, отдельный форум. Да и к asp.Net этот язык имеет тоже опосредованное отношение. Чисто броузерный язык. Только не ясно куда его тнести. Тут народ его в динамически-типизированные хочет отправить, но он ведь не динамический.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Serginio1, Вы писали:
AVK>>>Какая связь между отладкой в студии и ASP.NET? S>> Думаю по Tcp/Ip
AVK>Ты так троллишь бестолково что ли?
Каков вопрос таков и ответ. На Asp.Net сразу делается и клиент и сервер.
В клиент не входит TS. TS испльзуется только на этапе компиляции.
То есть может быть коровы без молока, но не может быть молоко без коровы.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Serginio1, Вы писали:
S>> Он точно имеет отношение к asp.Net. А там TypeScript интегрирован. S>>А asp.Net это дотнет. Так, что всё логично
VD>Для asp.Net у нас, вроде, отдельный форум. Да и к asp.Net этот язык имеет тоже опосредованное отношение. Чисто броузерный язык. Только не ясно куда его тнести. Тут народ его в динамически-типизированные хочет отправить, но он ведь не динамический.
Он пока не браузерный язык. Когда будет, тогда он и не будет иметь отношение.
Он кстати динамический по природе. Там псевдотипизация на уровне интеллисенсе. Все равно он транслируется в JS.
Хотя возможно я уже отстал от жизни
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Serginio1, Вы писали:
S>>Он кстати динамический по природе. Там псевдотипизация на уровне интеллисенсе. Все равно он транслируется в JS.
VD>Логика у тебя отличная. Вот еще Котлин, F#, Nemerle и Java транслируется в JS. Это тоже делает их динамическими?
Котлин нет. Он отдельно существует и кстати понравился. Все эти языки живут отдельно. Ты и C# забыл добавить.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, VladD2, Вы писали:
VD>Да, смешно. Но автор темы шутки не понял. Надо сюда по Дельфи что-нибудь запостить.
Автор шутку понял, не переживай. Но в каждой шутке ... Новость эта пришла в шарповской рассылке, а попала она туда, скорее всего, как раз потому что автор PR Хейлсберг.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Здравствуйте, Serginio1, Вы писали:
AVK>>Ты так троллишь бестолково что ли? S> Каков вопрос таков и ответ.
Вопрос как раз таки был нормальный. TS никакого отношения к ASP.NET не имеет, абсолютно ортогональная технология. Если у тебя другие сведения — поделись, а не отшучивайся по тупому.
S> На Asp.Net сразу делается и клиент и сервер.
И что?
S>В клиент не входит TS. TS испльзуется только на этапе компиляции.
И что?
S> То есть может быть коровы без молока, но не может быть молоко без коровы.
Вот только и TS может быть без ASP.NET, и ASP.NET без TS.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>