Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Alive, Tipi Sopravvisuti

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

Alive, Tipi Sopravvisuti

Avatar for Luca Del Puppo

Luca Del Puppo

October 22, 2022
Tweet

More Decks by Luca Del Puppo

Other Decks in Programming

Transcript

  1. 1 → Reason Why? 2 → Common Mistakes 3 →

    strict mode 4 → any vs unknown Index Alive, tipi sopravvissuti Index 5 → Guards 6 → Validations 7 → Conclusion
  2. Ego Slide Luca Del Puppo (aka Puppo) Full-Stack Developer in

    Flowing a Claranet Italian Company @puppo92 https://www.linkedin.com/in/lucadelpuppo/ [email protected]
  3. ➔ To think that typescript keeps always the code type-safe

    ➔ To forget that types disappears at runtime ➔ To use any if checking types is too hard or boring ➔ Don't know or forget the basics of js ➔ Don’t put a validation layer between the application and the externals Common Mistakes Alive, tipi sopravvissuti Common Mistakes
  4. ➔ Use types, interfaces or class to describe your object

    ➔ Describe at the best your types, use undefined and null if they are necessary ➔ Create the right signature of your methods (don’t forget the result type) ➔ Prefer immutable types (readonly, ReadOnly, ReadOnlyArray) The basic Alive, tipi sopravvissuti
  5. ➔ It forces us to use the type-checker as a

    friend ➔ It prevents wrong checks or wrong accesses to the objects ➔ It forces us to write the code with the correct signatures ➔ It helps to find the errors at compile time instead of runtime Strict mode Alive, tipi sopravvissuti Strict mode
  6. any

  7. let myAny: any = true myAny.trim().reverse().split(','); let myAnyNumeric: number =

    myAny; const sum = myAnyNumeric + 3; let myUnknown: unknown = true; myUnknown.trim(); // Property 'trim' does not exist on type 'unknown'.ts(2339) let myAnyNumeric: number = myUnknown; // Type 'unknown' is not assignable to type 'number'.ts(2322) if (typeof myUnknown === 'string') myUnknown.trim(); if (typeof myUnknown === "number") { let myAnyNumeric: number = myUnknown; const sum = myAnyNumeric + 3; } Any vs Unknown
  8. “Type guards are functions used to check if an object

    respect a specific type” Their form is Type Guard Alive, tipi sopravvissuti Guards declare function name(data: unknow): data is Type;
  9. “Assert functions are functions used to check if an object

    respect a specific type otherwise they throw an error” Their form is Assert Functions Alive, tipi sopravvissuti Guards declare function name(data: unknow): asserts data is Type;
  10. type Circle = { type: 'circle'; radius: number; } type

    Square = { type: 'square'; size: number; } type Shape = Circle | Square; function isCircle(shape: Shape): shape is Circle { return shape.type === 'circle'; } function isSquare(shape: Shape): shape is Square { return shape.type === 'square'; } type Circle = { type: 'circle'; radius: number; } type Square = { type: 'square'; size: number; } type Shape = Circle | Square; function ensureCircle(shape: Shape): asserts shape is Circle { if (shape.type !== 'circle') throw new Error('Not a circle'); } function ensureSquare(shape: Shape): asserts shape is Square { if (shape.type !== 'square') throw new Error('Not a square'); } Type Guards vs Assert Functions
  11. “In this case using the Validation word I want to

    focus you to the layer between your application and the external” - Data from API - Data from socket - All the data received from the external of your application Validation Alive, tipi sopravvissuti Validation
  12. - Prevent wrong types at runtime - Keep your code

    safer like during the development mode - Help you to find quickly if the APIs are changed - Prevent strange mistakes - You are sure that the API results are exactly what you expected Goal Alive, tipi sopravvissuti Validation