TypeScript array with minimum length

后端 未结 3 1509
野趣味
野趣味 2020-12-11 15:29

How can you create a type in TypeScript that only accepts arrays with two or more elements?

needsTwoOrMore([\"onlyOne\"]) // should have error
needsTwoOrMore         


        
3条回答
  •  星月不相逢
    2020-12-11 16:05

    This is an old question and the answer is fine (it helped me as well), but I just stumbled across this solution as well while playing.

    I had already defined a typed Tuple (type Tuple = [T, T];), and then below that, I had defined array of two or more as described above (type ArrayOfTwoOrMore = { 0: T, 1: T } & T[];).

    It occurred to me to try using the Tuple structure in place of { 0: T, 1: T }, like so:

    type ArrayOfTwoOrMore = [T, T, ...T[]];

    And it worked. Nice! It's a little more concise and perhaps able to be clearer in some use-cases.

    Worth noting is that a tuple doesn't have to be two items of the same type. Something like ['hello', 2] is a valid tuple. In my little code snippet, it just happens to be a suitable name and it needs to contain two elements of the same type.

提交回复
热议问题