在TypeScript中,我可以创建一个名为UnitCount
的类型作为number
的别名:
type UnitCount = number;
如果我现在定义一个带有此类型参数的函数,我可以使用UnitCount
或number
调用该函数:
function test(units: UnitCount) {
console.log('units =', units);
}
test(1 as UnitCount); // correct
test(2); // also correct
有没有办法定义UnitCount
,以便在没有明确演员的情况下number
无法使用UnitCount
?
答案 0 :(得分:2)
由于TypeScript使用结构类型,您必须找到一种在结构上区分类型的方法。
一种方法是使用" brand"扩展Number
并将未使用的属性添加到类型中...不幸的是,使用它需要断言any
:
interface UnitCount extends Number {
_unitCountBrand: any;
}
function test(units: UnitCount) {
console.log('units =', units);
}
test(1 as any); // ok
test(2); // error
这个断言可以被抽象成一个函数,这个更好一点:
function toUnitCount(val: number) {
return val as any as UnitCount;
}
test(toUnitCount(1)); // ok
test(2); // error
请注意,目前有一些关于supporting nominal types和units of measure的讨论。
答案 1 :(得分:0)
最简单的方法可能是定义一个带有数字字段的接口:
interface UnitCount {
value: number;
}