mirror of
https://github.com/jbranchaud/til
synced 2026-01-03 07:08:01 +00:00
Add Create A Non-Empty Array Type as a TypeScript TIL
This commit is contained in:
@@ -10,7 +10,7 @@ pairing with smart people at Hashrocket.
|
|||||||
|
|
||||||
For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186).
|
For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186).
|
||||||
|
|
||||||
_1261 TILs and counting..._
|
_1262 TILs and counting..._
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -1168,6 +1168,7 @@ _1261 TILs and counting..._
|
|||||||
|
|
||||||
- [Add Types To An Object Destructuring](typescript/add-types-to-an-object-destructuring.md)
|
- [Add Types To An Object Destructuring](typescript/add-types-to-an-object-destructuring.md)
|
||||||
- [Compiler Checks For Unused Params And Variables](typescript/compiler-checks-for-unused-params-and-variables.md)
|
- [Compiler Checks For Unused Params And Variables](typescript/compiler-checks-for-unused-params-and-variables.md)
|
||||||
|
- [Create A Non-Empty Array Type](typescript/create-a-non-empty-array-type.md)
|
||||||
- [Create A Union Type From An Array](typescript/create-a-union-type-from-an-array.md)
|
- [Create A Union Type From An Array](typescript/create-a-union-type-from-an-array.md)
|
||||||
- [Create Union Type From Constants](typescript/create-union-type-from-constants.md)
|
- [Create Union Type From Constants](typescript/create-union-type-from-constants.md)
|
||||||
- [Extract Object Type Keys Into A Union Type](typescript/extract-object-type-keys-into-a-union-type.md)
|
- [Extract Object Type Keys Into A Union Type](typescript/extract-object-type-keys-into-a-union-type.md)
|
||||||
|
|||||||
35
typescript/create-a-non-empty-array-type.md
Normal file
35
typescript/create-a-non-empty-array-type.md
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
# Create A Non-Empty Array Type
|
||||||
|
|
||||||
|
An array type (e.g. `Array<string>`) by default will allow an empty array. We
|
||||||
|
can define a custom array type that does static type checking to ensure arrays
|
||||||
|
aren't declared as empty.
|
||||||
|
|
||||||
|
To do this, we specify the array type has at least one item in addition to the
|
||||||
|
_spread_ of the rest of the array.
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
type NonEmptyArray<T> = [T, ...T[]];
|
||||||
|
```
|
||||||
|
|
||||||
|
If we declare a `NonEmptyArray` with no items:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
const statuses: NonEmptyArray<string> = [];
|
||||||
|
```
|
||||||
|
|
||||||
|
We'll get the following type error:
|
||||||
|
|
||||||
|
```
|
||||||
|
Type '[]' is not assignable to type 'NonEmptyArray<string>'.
|
||||||
|
Source has 0 element(s) but target requires 1.
|
||||||
|
```
|
||||||
|
|
||||||
|
Whereas as soon as we add at least one item, the type error goes away.
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
const statuses: NonEmptyArray<string> = ['active'];
|
||||||
|
```
|
||||||
|
|
||||||
|
Here is a [TS Playground example of this type](https://www.typescriptlang.org/play?#code/C4TwDgpgBAcg9gOwKIFsygIICcsEMQA8AKgHxQC8UA2kQDRQB0TRVAuqwNwBQXAxogGdgUCGlABlYLmABXARAEAuWIlToQ2PISFYAlggDmZSm259BwodLkLl8ZGI058BHfqMVqAcly9gugDcIL04gA).
|
||||||
|
|
||||||
|
[source](https://twitter.com/he_zhenghao/status/1583557892480778240)
|
||||||
Reference in New Issue
Block a user