TypeScript tip: Prefer type declarations to type assertions


TypeScript tip:

Prefer type declarations to type assertions.

Type assertions ignore excess properties. 👎
Type declarations check for excess properties. 👍

Plus, only type declarations provide autocomplete support as you declare the object literal.

#typescript

Here's a TS Playground that shows the difference:

https://www.typescriptlang.org/play?#code/C4TwDgpgBAqgzhATlAvFA3gKCjqA7AQwFsIAuKOYRASzwHMBubXCIg6gG3MpvqYF9MmAMYB7PJSgATAsAKoMzHIRLkARAGFRiEGoA0SqK3ZcoasToACiCAWHAAVnDESArh2C06AOjFE1mIKYAPTBUACCAG6i1FJQrnBeZgRwalAAZtpQoJBQKQiInuJQHNQA1tDAABbUcN4hYQDqVSAA-FAAQhDCBAnQ1MDSohBweADkg8JV3WUZWRAAHlTyYIiikIXUI-Uukn2IAIwKWLj4xGTSsgTeKhAGp8ac5DJy3o8c97iewBwXY1IQSIQDjrJBjKChKAAFRqcAoVVE7ji6RM3igAElBlJhqMJlAAO4DKrJVL1fh5OHwJBMISQgAKNnSSDyeCMCzApWEA2y4GgAOEHAIiFk1GKtEotik9UhzTanW6vQQUG5UxmcMyyEWyygq1Bm22InEewK5CpyDQJzOqkur1un3ezyubzYnGY31+5H+gOBevBkJhtQyJjhpQqysGcARSLRgF4NwCyO4EhEA
Another reason to avoid "as": It doesn't check for missing properties either.

(unless you happen to also be adding extra properties, which is unlikely)

https://www.typescriptlang.org/play?#code/C4TwDgpgBAqgzhATlAvFA3gKCjqA7AQwFsIAuKOYRASzwHMBubXCIg6gG3MpvqYF9MmAMYB7PJSgATAsAKoMzHIRLkARAGFRiEGoA0SqK3ZcoasToACiCAWHAAVnDESArh2C06AOjFE1mIKYAPTBUACCAG6i1FJQrnBeZgRwalAAZtpQoJBQKQiInuJQHNQA1tDAABbUcN4hYQDqVSAA-FAAQhDCBAnQ1MDSohBweADkg8JV3WUZWUS1ifRQYIiikIXUI-Uukn2IAIwKWLhGbJzkMnLexpwG-HlwsAVMDWbhqUMj45PTwrOZZAQAAeVHkq3WSE8IyMA2miFIInEewKACZjoYVGRpLICN4sQZTrdTFc8cTCbhPMAONixlIIJEIBxIYgxoFHs8kK9QlAAAo2dJIPJ4IzAsClYQDbLgaD04QcAiIWTUYq0Si2KT1HnNNqdbq9BBQKVTGZPQGisErNYbaF1JESQb7ADM5HgQrQJ3wxGxpPx3opxMuuJu5w4zCpNPIdIZTJZYygPIAKjUniDLRCbSAMiYnqUKkbBnAqqJ3JqoIBeDcAsjuBIRJmXSboKpVFCR5DhwURQE3-ObIBZwJZ0K0s207ZGOgoAFldBWOCbCADlRMBKlVZNkU9nOHBmFig9cCTWgA

View original on X