Typescript 类型脚本:断言对象文字的键值彼此相等

Typescript 类型脚本:断言对象文字的键值彼此相等,typescript,Typescript,在TypeScript中,是否可以断言const对象文字是以每个键等于其值的方式生成的 换言之: //很好 常量测试ID:KeyEqualsValue={ 福:“福” }常量 //坏的 常量测试ID:KeyEqualsValue={ foo:'bar'//错误 }常量 是,您可以使用获取对象键,然后可以循环遍历键并比较字符串值。如果它们不相等,您可以抛出一个错误。不使用单个类型,您可以使用函数: function propAsValue<T extends { [P in keyof T]

在TypeScript中,是否可以断言
const
对象文字是以每个键等于其值的方式生成的

换言之:

//很好
常量测试ID:KeyEqualsValue={
福:“福”
}常量
//坏的
常量测试ID:KeyEqualsValue={
foo:'bar'//错误
}常量

是,您可以使用获取对象键,然后可以循环遍历键并比较字符串值。如果它们不相等,您可以抛出一个错误。

不使用单个类型,您可以使用函数:

function propAsValue<T extends { [P in keyof T]: P }>(o: T) {
    return o;
}
const testIds = propAsValue({
    foo: 'foo'
});

const testIds2 = propAsValue({
    foo: 'bar'
});
函数propAsValue(o:T){
返回o;
}
const testIds=propAsValue({
福:“福”
});
const testIds2=propAsValue({
福:“酒吧”
});

或者使用内联函数,如果您想简洁明了,让每个人都感到困惑:

const testIds = (<T extends { [P in keyof T]: P }>(o: T) => o)({
    foo: 'foo'
});
const testIds=((o:T)=>o)({
福:“福”
});

虽然我不确定您的用例是什么,但是您最好使用
Object.keys

非常酷。这对我有用。谢谢我将这些测试ID用于页面上的不同元素,因此我希望它们是唯一的,并且我还希望能够键入其他函数参数,如
keyof typeof testid
。您的解决方案满足以下要求:)
T扩展[…]keyof T
我无法理解这不是一个循环派生。谢谢,但我想要的是编译时检查,而不是运行时检查。