Typescript: Pertanyaan/Ide : Ulangi nilai primitif dari tipe kustom

Dibuat pada 11 Des 2016  ·  1Komentar  ·  Sumber: microsoft/TypeScript

Versi TypeScript: 2.1.4

Kode
Kode berikut digunakan untuk bekerja di 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
}

Saya pikir perilaku baru itu benar.
Karena k++ adalah operasi antara angka dan angka, masuk akal jika k menjadi angka.

Satu-satunya pekerjaan yang saya lakukan adalah

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

atau

// 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
}

Pendekatan kedua kurang ekspresif, tetapi lebih bersih.

Pertanyaan
Apakah ada cara yang lebih baik untuk mengulangi nilai primitif dari tipe khusus?

Question

Komentar yang paling membantu

Saya tidak yakin apa kasus penggunaannya, tetapi untuk secara bersamaan mempertahankan jenis yang diinginkan dan mempertahankan kebenaran, saya pikir yang berikut ini akan sesuai

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);
}

Saya katakan pertahankan kebenaran karena untuk keluar dari loop dalam contoh Anda, k harus mengambil nilai 10 yang bukan Digit .

>Semua komentar

Saya tidak yakin apa kasus penggunaannya, tetapi untuk secara bersamaan mempertahankan jenis yang diinginkan dan mempertahankan kebenaran, saya pikir yang berikut ini akan sesuai

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);
}

Saya katakan pertahankan kebenaran karena untuk keluar dari loop dalam contoh Anda, k harus mengambil nilai 10 yang bukan Digit .

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

bgrieder picture bgrieder  ·  3Komentar

kyasbal-1994 picture kyasbal-1994  ·  3Komentar

weswigham picture weswigham  ·  3Komentar

DanielRosenwasser picture DanielRosenwasser  ·  3Komentar

dlaberge picture dlaberge  ·  3Komentar