Typescript: Pregunta / idea: iterar sobre valores primitivos de un tipo personalizado

Creado en 11 dic. 2016  ·  1Comentario  ·  Fuente: microsoft/TypeScript

Versión de TypeScript: 2.1.4

Código
El siguiente código utilizado para trabajar en TS 2.0

type Digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;

function iExpectDigit(d:Digit)
{ }

for (let k: Digit = 1; k < 10; k++) {
  iExpectDigit(k); //Error, because K is number
}

Creo que el nuevo comportamiento es correcto.
Dado que k++ es una operación entre un dígito y un número, tiene sentido que k convierta en un número.

El único trabajo con el que he venido es

for (let k: Digit = 1; k < 10; k = <Digit>(k + 1)) {
    // k is digit
}

o

// in some module
export let digits: Digit[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

for (let k of digits)
{
    // k is digit
}

El segundo enfoque es menos expresivo, pero más limpio.

Pregunta
¿Existe una mejor manera de iterar sobre valores primitivos de un tipo personalizado?

Question

Comentario más útil

No estoy seguro de cuál es el caso de uso, pero para retener simultáneamente el tipo deseado y mantener la corrección, creo que lo siguiente sería apropiado

type Digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;

function iExpectDigit(d: Digit) { }

function isDigit(n: number): n is Digit {
    return n > -1 && n < 10 && n === Math.trunc(n);
}

for (let k = 0; isDigit(k); k++) {
    iExpectDigit(k);
}

Digo mantener la corrección porque para salir del ciclo en su ejemplo, k debe tomar el valor 10 que no es un Digit .

>Todos los comentarios

No estoy seguro de cuál es el caso de uso, pero para retener simultáneamente el tipo deseado y mantener la corrección, creo que lo siguiente sería apropiado

type Digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;

function iExpectDigit(d: Digit) { }

function isDigit(n: number): n is Digit {
    return n > -1 && n < 10 && n === Math.trunc(n);
}

for (let k = 0; isDigit(k); k++) {
    iExpectDigit(k);
}

Digo mantener la corrección porque para salir del ciclo en su ejemplo, k debe tomar el valor 10 que no es un Digit .

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

bgrieder picture bgrieder  ·  3Comentarios

wmaurer picture wmaurer  ·  3Comentarios

jbondc picture jbondc  ·  3Comentarios

kyasbal-1994 picture kyasbal-1994  ·  3Comentarios

Roam-Cooper picture Roam-Cooper  ·  3Comentarios