gpt4 book ai didi

typescript 索引签名

转载 作者:搜寻专家 更新时间:2023-10-30 20:43:12 26 4
gpt4 key购买 nike

我希望将对象的可分配类型限制为特定类型。示例,其中所有键都必须具有 number 值的对象,如下所示:

interface NumberMap {
[key: string]: number;
}

这适用于强制值限制,但是我将无法确定 map 变量中实际存在哪些键。

const map: NumberMap = {
one: 1,
two: 2,
three: 3,
};

// no error, but incorrect, this key does *not* exist
const lol = map.weoiroweiroew;

// Also cannot do this
type MyKeys = keyof map;

有没有办法在不丢失实现该签名的对象具有哪些键的信息的情况下强制执行索引签名?

最佳答案

同时限制值和保留有关哪些键实际在实现类型中的类型信息的唯一方法是使用通用辅助函数。该函数将强制对象字面量扩展接口(interface),但它会推断对象字面量的实际类型:

interface NumberMap {
[key: string]: number;
}

function createNumberMap<T extends NumberMap>(v: T) {
return v;
}
const map = createNumberMap({
one: 1,
two: 2,
three: 3,
// no: '' // error
});
map.one //ok
map.no //error

关于 typescript 索引签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50836259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com