Typescript: 问题/想法:迭代自定义类型的原始值

创建于 2016-12-11  ·  1评论  ·  资料来源: microsoft/TypeScript

打字稿版本: 2.1.4

代码
以下代码用于在 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
}

我认为新行为是正确的。
由于k++是数字和数字之间的运算,因此k成为数字确实有意义。

我唯一的解决方法是

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

要么

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

第二种方法表达能力较差,但更简洁。

问题
有没有更好的方法来迭代自定义类型的原始值?

Question

最有用的评论

我不确定用例是什么,但为了同时保留所需的类型并保持正确性,我认为以下是合适的

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

我说保持正确性,因为为了退出您的示例中的循环, k必须采用值10 ,它不是Digit

>所有评论

我不确定用例是什么,但为了同时保留所需的类型并保持正确性,我认为以下是合适的

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

我说保持正确性,因为为了退出您的示例中的循环, k必须采用值10 ,它不是Digit

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

jbondc picture jbondc  ·  3评论

wmaurer picture wmaurer  ·  3评论

blendsdk picture blendsdk  ·  3评论

MartynasZilinskas picture MartynasZilinskas  ·  3评论

weswigham picture weswigham  ·  3评论