TypeScript

 

The Good, The Bad & The Ugly

@sepehrity

February 2020

#iran_react

Our Story

@sepehrity

The Beginning

@sepehrity

CRA 2.1

@sepehrity

The Progress 🚀

@sepehrity

Let's Start...

Following Questions:

  • Why Do We Need Types?
 
 
 
  • What is TypeScript?
 
 
  • Type System in JavaScript?
 
 
 
  • Why TypeScript?
 
 
  • When to use TypeScript?
 
 

@sepehrity

Type System In JavaScript

typeof x

 
 
  • string
 
 
  • number
 
 
 
  • undefined
 
 
 
  • boolean
 
 
 
  • object
 
 
  • function
 
 
  • symbol
 
 

@sepehrity

Runtime type errors

  • # is not a function
 
 
 
  • cannot read property # of null/undefined
 
 
 

@sepehrity

Weird Type Error

 
const getBar = () => {
  const x = 'my string';
  const y = x.foo;
  return y.bar;
};

getBar();
// Cannot read property 'bar' of undefined

@sepehrity

Weird Type Error

 

@sepehrity

Everything Is Okay!

 
const getColor = (person) => {
  if (person.age > 18) {
    return 'green';
  } else {
    return 'red';
  }
};

getColor(90);
// 'red'

@sepehrity

Everything Is Okay!

 

@sepehrity

@sepehrity

What Is TypeScript?

TypeScript is a typed superset of JavaScript that compiles
to plain JavaScript.

 

@sepehrity

Why Do We Need Types?

 
  • finds bug
  • code is self-documenting and never stale
  • runs ahead of time
  • working with types will help you think better and write better code
  • feel much safer making changes as a team
  • enhanced autocompletion

@sepehrity

Let's see!

 
type States = {
    loading: boolean;
    users?: User[];
};

if (loading) return <Loading />

return (
  <button onClick={handleClick}>show users</button>
)

@sepehrity

Hmm...

 
const handleClick = (event: React.MouseEvent<...>) => {
  console.log(users.map(() => ...));
  // Object is possibly 'null'
};

if (loading) return <Loading />

return (
  <button onClick={handleClick}>show users</button>
)

@sepehrity

What Should I Do?

 
if (loading) return <Loading />

return (
  <UsersList users={users} />
)

const UsersList = ({ users }) => {
  const handleClick = (
    event: React.MouseEvent<...>
  ) => {
    console.log(users.map(() => ...)); // never be null
  };
  return (
    <button onClick={handleClick}>show users</button>
  )
}

@sepehrity

Why TypeScript?

 

@sepehrity

  • Google Trends
  • StackOverFlow (Third Love Language)
  • Github Language Stats

Google Trends

 

@sepehrity

StackOverFlow (Third Love Language)

 

@sepehrity

Github Language Stats

 

@sepehrity

When To Use TypeScript?

 

@sepehrity

Types First, Codes Next

Codes First, Types Next

  • complex data objects
  • make libraries
  • simple data objects
  • implement UI
  • you hate TypeScript
  • medium codebase
 
  • small codebase
  • less runtime errors

THANKS! <3

 

TypeScript: The Good, The Bad & The Ugly

By Sepehr Mohammadi

TypeScript: The Good, The Bad & The Ugly

  • 266