我有一个标识符的静态列表。我想使用其中一个标识符“标记”一个函数调用。我知道我可以做到以下几点:
type Id = 'id-1' | 'id-2';
function foo(id : Id) {
console.log(`my id: ${id}`);
}
foo('id-1');
foo('id-2');
但我真正希望发生的是,如果将相同的id传递给函数,则会看到类型错误:
type MagicId = /* some magic type to achieve uniqueness */;
function foo(id : MagicId) {
console.log(`my id: ${id}`);
}
foo('id-1');
foo('id-1'); // type error is thrown
1条答案
按热度按时间enxuqcxy1#
有一些东西可以实现这一点,但你必须依靠对象:
正如你所看到的,外部的
foo
可以接受"id-1"
和"id-2"
,但是内部的不能,因为我们Exclude
外部foo的类型。如果你有连续的调用,这种方法就可以工作,否则你必须保存外部
foo
的结果,并假设你永远不会再次调用外部foo
。这里是一个操场。
改进后的版本如下:
这是递归的,并去掉了我们已经使用的类型:
这里是运动场