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

Alive, Tipi Sopravvisuti

Alive, Tipi Sopravvisuti

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