SlideShare a Scribd company logo
1 of 60
Download to read offline
Antifragile< >
Philipp Sapronov

philipp.sapronov@gmail.com
Antifragility is a property of systems in
which they increase in capability to thrive as
a result of stressors, shocks, volatility, noise,
mistakes, faults, attacks, or failures.
Developers
Strict

Structural

Turing Complete

Type system is:
Strict
" ": ,
strict  

// "noImplicitAny": true, 

// "strictNullChecks": true,  

// "strictFunctionTypes": true,  

// "strictBindCallApply": true,  

// "strictPropertyInitialization": true,  

// "noImplicitThis": true,  

// "alwaysStrict": true,
true
Strict
A Note on Soundness


TypeScript’s type system allows certain operations that can’t be known at
compile-time to be safe. When a type system has this property, it is said to not be
“sound”. {...}


https://www.typescriptlang.org/docs/handbook/type-compatibility.html
Strict
Strict
any
Strict
unknown
ts before


try
catch
{}

( : ) {}


e any
ts v4.0+


try
catch
{}

( : ) {}
e unknown
Strict
const : [] = []


[ ]. ()
arr
arr
string
0 split // error


Strict
/* tsconfig.json */


// v4.1+

" ": ,
noUncheckedIndexedAccess true
Strict
// "noUncheckedIndexedAccess": true,


// string | undefined



const : [] = []

[ ]
arr
arr
string
0
Strict
A
B
|
Union
type T1 =

| 

string
number
T1: string | number
type T2 = 

| 

{a: string}
{b: number}
T2: {a: string} | {b: number}
Strict
interface
const
return
User
User
user
{

?: ;

}


= ( : ) => {

.email. ();

}


email string | null
getEmail
toLowerCase
user
Strict
( .email ). ();



user as string toLowerCase
Strict
Casting
( ).method()
null as any
A as
B
(( ...) ...)

null as as
Strict
About narrowing (guards)


typescriptlang.org/docs/handbook/2/narrowing.html


Strict
Strict
// typeof type guards

/*...*/
// instanceof narrowing 

/*...*/
// The “in” operator narrowing 

/*...*/
// Using type predicates

if
if instanceof
if in
function is
(typeof “ ”) { }


( ) { }


(“ ” ) { }


( : ):
str
x Date
x
Shape Circle
=== string
property
isCircle shape shape
Structural
interface
const
const =>
{

: ;

: ;

};


= : , : ;


= ( : ) {};


( );
( : , : );
Point
point: Point
fn point Point
fn point
fn
x
y
x y
x y
number
number
100 100
100 100
{ }
{ }
// OK

// OK

Structural
const =>
const
= ( : : , : ) {};


= : , : ;


( );
fn point
point
fn point
{ }
{ }
x y
x y z
number number
1.5 2.4, : 999999
// OK



Structural
const
const
: , : ;


. ( ). (( ) => {

= [ ];

});


point
point
value point
= x y
Object
{ }
1.5 2.4
keys forEach key
key
/**

* Element implicitly has an 'any' type because expression of type 'string'

* can't be used to index type '{ x: number; y: number; }'.

*/


Structural
// lib.es5.d.ts

// proposal

< >
keys
keys
( : ): []


( : T): ( )[]







o
o
object string
object
T T
extends keyof
Structural
type
function
for const of
if === === return
throw new
const
= : ; :
( : ) {

( . ) {
( " " || " ") ;


(" ");


}

}


= : , : ,
( );
Point
Point
key
key key
Error
point
point
{ }
{ }

x y
Object ( )
x y z
number number ;


x y
This is impossible
0.5 2.4 : 999999999
fn
keys
fn
point
point // (x | y)[]

// Throws an exception


https://stackoverflow.com/questions/55012174/why-doesnt-object-keys-return-a-keyof-type-in-typescript
Structural
Branding and Type-Tagging



Structural
const bar
bar bar bar bar bar
=
Object
{ }
foo “ ”
: ;


. ( , , , , )
bar
assign // any
Structural
// lib.es5.d.ts

assign
assign
assign
assign
< , >( : , : ): & ;

< , , >( : , : , : ): & & ;

< , , , >( : , : , : , : ): & & & ;

( : , : []): ;




T U target source
T U V target source1 source2
T U V W target source1 source2 source3
target sources
T U T U
T U V T U V
T U V W T U V W
object ... any any
Structural
A
B
&
Intersection
type T1 =

& 

string
number
T1: never
type T2 = 

& 

{a: string}
{b: number}
T2: {a: string, b: number}
Structural
// X | Y | Z => X & Y & Z

type =
extends ? => : extends =>
?
:
UnionToIntersection U  

U : U : I
I

;
< >
infer
( k ) (k )
any void never void

never
( )
assign< , []>( : , : ): 

& < [ ]>;




T P T P
T UnionToIntersection P
extends extends
object object
number
t sources
...
Structural
TypeScript
Structural
Turing Complete
Generic Types

Conditional Types

Recursive Types

Mapped Types




Turing complete
Cup<T>
Turing complete
< > =
T *
type
Turing complete
type < >
Identity T T
=
type < , > [ , ]
Pair T U T U
=
const =>
( )
identity t t
=
const =>
( , ) [ , ]
pair t u t u
=
function
=>
const
< >

( : | (() )): [ , < < >>];


[ , ] < | >( )

( )


useState
Dispatch SetStateAction
state setState useState
setState
S
S S S S
initialState
null
= string null
/* only string or null is allowed */
Turing complete
type
type extends
=>
const extends =>
return
{ : };


< > = {

: [];

: ( : ) ;

};


= < >( : < >) {

{ } ;

};



Row
TableProps T Row
T
T
T Row TableProps T
= id
rows
onClick void
string
row
props
Table
< > </ >
table table
/* ... */
Turing complete
interface extends
const extends =>
const
return
< . < >> {

: ;

: < >;

}


= <T . < >>( : < >) {

{ : , } ;

{ } ;

};
Props T React ComponentType
T
React.ComponentProps T
React ComponentType Props T
component Component componentProps props
componentProps
any
component
componentProps
any
=
Item props
< />
Component ...
?
Turing complete
Conditional types
Turing complete
? :
===
typeof a “ ”
boolean true false
Turing complete
? :
extends
A boolean true false
? :
===
typeof a “ ”
boolean true false
*
? :
extends
A B *
Turing complete
never
? :
extends
T U T
type Exclude<T, U> =
Exclude< | , >
'username' 'email' 'email' // username
Turing complete
infer
Turing complete
type extends ? :
type
type
< > < > ;


< []>;
<[ ]>;
ArrayType T T Array
T1 ArrayType
T2 ArrayType
= U U never
= string
= string, number
infer
// string

// string | number

Turing complete
type extends ? :
type
< > < > < > ;


< < | < < < >>>>>; 

ArrayType T T Array ArrayType
T2 ArrayType Array Array Array Array
= U U never
= string number
infer
// string | number

Turing complete
// v4.1+
type
extends keyof
extends
?
: extends keyof
?
:
<

. | < >>  

. < >

.
. [ ]

{};

ComponentProps
T JSX IntrinsicElements JSXElementConstructor
T React JSXElementConstructor
T JSX IntrinsicElements

JSX IntrinsicElements T
any =
P
P

infer
Turing complete
interface extends
const extends =>
const
return
< . < >> {

: ;

: < >;

}


= <T . < >>( : < >) {

{ : , } ;

{ } ;

};
Props T React ComponentType
T
React.ComponentProps T
React ComponentType Props T
component Component componentProps props
componentProps
any
component
componentProps
any
=
Item props
< />
Component ...
Turing complete
type keyof
type extends
type extends
Component JSX IntrinsicElements JSXElementConstructor
OptionalProps T T
Props T Component
T
React.ComponentProps T
OptionalProps T
= any
=
errorMessage
any
component
componentProps
. | < >

< > ‘ ’; 

? { : }

: {};


< < >> {

: ;

: < >;

} & < >;

input
string
Turing complete
Mapped types
Turing complete
interface
const =>
const =>
const
{

: ;

: ;

: ;

}


( : ) { };


() {

[ , ] = < >( );

};
SignUpData
SignUpData
state setState useState SignUpData
email
password
username
=
=
string
string
string
// api/auth

/* ... */
// components/auth

signUp
SignUpForm
data
{}
Turing complete
interface
const =>
const =>
const
{

: ;

: ;

: ;

}


( : ) { };


() {

[ , ] = < < >>( );

};
SignUpData
SignUpData
state setState useState Partial SignUpData
email
password
username
=
=
string
string
string
// api/auth

/* ... */
// components/auth

signUp
SignUpForm
data
{}
Turing complete
{
}
email
password
username
:
, :
, :
string

string

string

{
}
email
password
username
?:
, ?:
, ?:
string

string

string

Turing complete
{ }
[ ]
in :
K * *
Turing complete
type Partial<T> =
{ }
[ ]
in ?:
K keyof T T[K]
Turing complete
type Required<T> =
{ }
[ ]-
in ?:
K keyof T T[K]
Turing complete
Exclude

Extract

Pick

Omit

Partial

ReturnType

Parameters
Challenge :)
Turing complete
Links
www.typescriptlang.org

@why_typescript_is_bad

freecodecamp.org/news/typescript-curry-ramda-types-f747e99744ab

ybogomolov.me/typesafe-typescript

github.com/type-challenges/type-challenges

github.com/millsp/ts-toolbelt
Thank s!

More Related Content

What's hot

FP 201 - Unit 6
FP 201 - Unit 6FP 201 - Unit 6
FP 201 - Unit 6
rohassanie
 
FP 201 - Unit 3 Part 2
FP 201 - Unit 3 Part 2FP 201 - Unit 3 Part 2
FP 201 - Unit 3 Part 2
rohassanie
 

What's hot (20)

C++11
C++11C++11
C++11
 
12. Exception Handling
12. Exception Handling 12. Exception Handling
12. Exception Handling
 
FP 201 - Unit 6
FP 201 - Unit 6FP 201 - Unit 6
FP 201 - Unit 6
 
Advanced C - Part 2
Advanced C - Part 2Advanced C - Part 2
Advanced C - Part 2
 
FP 201 - Unit 3 Part 2
FP 201 - Unit 3 Part 2FP 201 - Unit 3 Part 2
FP 201 - Unit 3 Part 2
 
C++11
C++11C++11
C++11
 
Python unit 3 and Unit 4
Python unit 3 and Unit 4Python unit 3 and Unit 4
Python unit 3 and Unit 4
 
OpenGurukul : Language : C++ Programming
OpenGurukul : Language : C++ ProgrammingOpenGurukul : Language : C++ Programming
OpenGurukul : Language : C++ Programming
 
05. Conditional Statements
05. Conditional Statements05. Conditional Statements
05. Conditional Statements
 
Fp201 unit4
Fp201 unit4Fp201 unit4
Fp201 unit4
 
C++ programming
C++ programmingC++ programming
C++ programming
 
Array strings
Array stringsArray strings
Array strings
 
06.Loops
06.Loops06.Loops
06.Loops
 
Free Monads Getting Started
Free Monads Getting StartedFree Monads Getting Started
Free Monads Getting Started
 
GE8151 Problem Solving and Python Programming
GE8151 Problem Solving and Python ProgrammingGE8151 Problem Solving and Python Programming
GE8151 Problem Solving and Python Programming
 
Python programming workshop session 1
Python programming workshop session 1Python programming workshop session 1
Python programming workshop session 1
 
03. Operators Expressions and statements
03. Operators Expressions and statements03. Operators Expressions and statements
03. Operators Expressions and statements
 
Functional programming
Functional programmingFunctional programming
Functional programming
 
2 BytesC++ course_2014_c9_ pointers and dynamic arrays
2 BytesC++ course_2014_c9_ pointers and dynamic arrays 2 BytesC++ course_2014_c9_ pointers and dynamic arrays
2 BytesC++ course_2014_c9_ pointers and dynamic arrays
 
Fun with Lambdas: C++14 Style (part 1)
Fun with Lambdas: C++14 Style (part 1)Fun with Lambdas: C++14 Style (part 1)
Fun with Lambdas: C++14 Style (part 1)
 

Similar to Антихрупкий TypeScript | Odessa Frontend Meetup #17

So I am writing a CS code for a project and I keep getting cannot .pdf
So I am writing a CS code for a project and I keep getting cannot .pdfSo I am writing a CS code for a project and I keep getting cannot .pdf
So I am writing a CS code for a project and I keep getting cannot .pdf
ezonesolutions
 
Introduction To Csharp
Introduction To CsharpIntroduction To Csharp
Introduction To Csharp
g_hemanth17
 
Introduction to-csharp-1229579367461426-1
Introduction to-csharp-1229579367461426-1Introduction to-csharp-1229579367461426-1
Introduction to-csharp-1229579367461426-1
Sachin Singh
 
Introduction to CSharp
Introduction to CSharpIntroduction to CSharp
Introduction to CSharp
Mody Farouk
 
Introduction to csharp
Introduction to csharpIntroduction to csharp
Introduction to csharp
Raga Vahini
 
Introduction to csharp
Introduction to csharpIntroduction to csharp
Introduction to csharp
Satish Verma
 
Introduction to csharp
Introduction to csharpIntroduction to csharp
Introduction to csharp
singhadarsh
 

Similar to Антихрупкий TypeScript | Odessa Frontend Meetup #17 (20)

Introduction to typescript
Introduction to typescriptIntroduction to typescript
Introduction to typescript
 
Add an interactive command line to your C++ application
Add an interactive command line to your C++ applicationAdd an interactive command line to your C++ application
Add an interactive command line to your C++ application
 
So I am writing a CS code for a project and I keep getting cannot .pdf
So I am writing a CS code for a project and I keep getting cannot .pdfSo I am writing a CS code for a project and I keep getting cannot .pdf
So I am writing a CS code for a project and I keep getting cannot .pdf
 
Lập trình C
Lập trình CLập trình C
Lập trình C
 
C++11 - STL Additions
C++11 - STL AdditionsC++11 - STL Additions
C++11 - STL Additions
 
core java
 core java core java
core java
 
Introduction To Csharp
Introduction To CsharpIntroduction To Csharp
Introduction To Csharp
 
Introduction to-csharp-1229579367461426-1
Introduction to-csharp-1229579367461426-1Introduction to-csharp-1229579367461426-1
Introduction to-csharp-1229579367461426-1
 
Introduction to CSharp
Introduction to CSharpIntroduction to CSharp
Introduction to CSharp
 
Introduction to csharp
Introduction to csharpIntroduction to csharp
Introduction to csharp
 
Introduction to csharp
Introduction to csharpIntroduction to csharp
Introduction to csharp
 
Introduction to csharp
Introduction to csharpIntroduction to csharp
Introduction to csharp
 
Effective Modern C++
Effective Modern C++Effective Modern C++
Effective Modern C++
 
C tutorial
C tutorialC tutorial
C tutorial
 
Welcome to Modern C++
Welcome to Modern C++Welcome to Modern C++
Welcome to Modern C++
 
TechTalk - Dotnet
TechTalk - DotnetTechTalk - Dotnet
TechTalk - Dotnet
 
IntroToCSharpcode.ppt
IntroToCSharpcode.pptIntroToCSharpcode.ppt
IntroToCSharpcode.ppt
 
TypeScript Best Practices
TypeScript Best PracticesTypeScript Best Practices
TypeScript Best Practices
 
Paradigmas de Linguagens de Programacao - Aula #5
Paradigmas de Linguagens de Programacao - Aula #5Paradigmas de Linguagens de Programacao - Aula #5
Paradigmas de Linguagens de Programacao - Aula #5
 
Modern C++ Concurrency API
Modern C++ Concurrency APIModern C++ Concurrency API
Modern C++ Concurrency API
 

More from OdessaFrontend

Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
OdessaFrontend
 

More from OdessaFrontend (20)

Викторина | Odessa Frontend Meetup #19
Викторина | Odessa Frontend Meetup #19Викторина | Odessa Frontend Meetup #19
Викторина | Odessa Frontend Meetup #19
 
Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...
Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...
Использование Recoil в React и React Native приложениях | Odessa Frontend Mee...
 
Великолепный Gatsby.js | Odessa Frontend Meetup #19
Великолепный Gatsby.js | Odessa Frontend Meetup #19Великолепный Gatsby.js | Odessa Frontend Meetup #19
Великолепный Gatsby.js | Odessa Frontend Meetup #19
 
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
Функциональное программирование с использованием библиотеки fp-ts | Odessa Fr...
 
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
 
Викторина | Odessa Frontend Meetup #17
Викторина | Odessa Frontend Meetup #17Викторина | Odessa Frontend Meetup #17
Викторина | Odessa Frontend Meetup #17
 
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
 
OAuth2 и OpenID Connect простым языком | Odessa Frontend Meetup #17
OAuth2 и OpenID Connect простым языком | Odessa Frontend Meetup #17OAuth2 и OpenID Connect простым языком | Odessa Frontend Meetup #17
OAuth2 и OpenID Connect простым языком | Odessa Frontend Meetup #17
 
Объекты в ECMAScript | Odessa Frontend Meetup #16
Объекты в ECMAScript | Odessa Frontend Meetup #16Объекты в ECMAScript | Odessa Frontend Meetup #16
Объекты в ECMAScript | Odessa Frontend Meetup #16
 
Фриланс как профессиональная деградация | Odessa Frontend Meetup #16
Фриланс как профессиональная деградация | Odessa Frontend Meetup #16Фриланс как профессиональная деградация | Odessa Frontend Meetup #16
Фриланс как профессиональная деградация | Odessa Frontend Meetup #16
 
Cлайдер на CSS | Odessa Frontend Meetup #16
Cлайдер на CSS | Odessa Frontend Meetup #16Cлайдер на CSS | Odessa Frontend Meetup #16
Cлайдер на CSS | Odessa Frontend Meetup #16
 
Современный станок верстальщика
Современный станок верстальщикаСовременный станок верстальщика
Современный станок верстальщика
 
Викторина | Odessa Frontend Meetup #15
Викторина | Odessa Frontend Meetup #15Викторина | Odessa Frontend Meetup #15
Викторина | Odessa Frontend Meetup #15
 
DRY’им Vuex | Odessa Frontend Meetup #15
DRY’им Vuex | Odessa Frontend Meetup #15DRY’им Vuex | Odessa Frontend Meetup #15
DRY’им Vuex | Odessa Frontend Meetup #15
 
А/Б тестирование: Что? Как? Зачем? | Odessa Frontend Meetup #15
А/Б тестирование: Что? Как? Зачем? | Odessa Frontend Meetup #15А/Б тестирование: Что? Как? Зачем? | Odessa Frontend Meetup #15
А/Б тестирование: Что? Как? Зачем? | Odessa Frontend Meetup #15
 
Пощупать 3д в браузере | Odessa Frontend Meetup #15
Пощупать 3д в браузере | Odessa Frontend Meetup #15Пощупать 3д в браузере | Odessa Frontend Meetup #15
Пощупать 3д в браузере | Odessa Frontend Meetup #15
 
Викторина | Odessa Frontend Meetup #14
Викторина | Odessa Frontend Meetup #14Викторина | Odessa Frontend Meetup #14
Викторина | Odessa Frontend Meetup #14
 
Викторина | Odessa Frontend Meetup #13
Викторина | Odessa Frontend Meetup #13Викторина | Odessa Frontend Meetup #13
Викторина | Odessa Frontend Meetup #13
 
Структуры данных в JavaScript | Odessa Frontend Meetup #13
Структуры данных в JavaScript | Odessa Frontend Meetup #13Структуры данных в JavaScript | Odessa Frontend Meetup #13
Структуры данных в JavaScript | Odessa Frontend Meetup #13
 
Эффективность с большой буквы Э… или любой другой | Odessa Frontend Meetup #13
Эффективность с большой буквы Э… или любой другой | Odessa Frontend Meetup #13Эффективность с большой буквы Э… или любой другой | Odessa Frontend Meetup #13
Эффективность с большой буквы Э… или любой другой | Odessa Frontend Meetup #13
 

Recently uploaded

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 

Recently uploaded (20)

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 

Антихрупкий TypeScript | Odessa Frontend Meetup #17