有没有办法构造一个类型,允许对象使用任何类型的键,只要它们是大写的?
我希望这能够通过:
const example: OnlyUppercaseKeys = {
TEST: 'any string',
TEST_ME: 'any string'
};
Run Code Online (Sandbox Code Playgroud)
我希望这失败:
const example: OnlyUppercaseKeys = {
Test: 'any string',
'test_me': 'any string'
};
Run Code Online (Sandbox Code Playgroud)
我知道有字符串操作类型。我什至可以使用它们来构造一个类型,将任何键转换为大写,但我不知道如何使用将其签入的测试来编写类型Record<???, string>
const example: Record<Capitalize<string>, unknown> = {
TEST: 'any string',
TEST_ME: 'any string',
a: 'a'
}; // don't work
Run Code Online (Sandbox Code Playgroud)
如果您预先知道所有密钥,则可以使用独立类型来完成此操作。
type AllowedKeys = 'a' | 'b'
const example2: Record<Uppercase<AllowedKeys>, unknown> = {
A: 'a',
B: 'b'
}
Run Code Online (Sandbox Code Playgroud)
为此,您应该使用额外的函数。
const uppercaseed = <
Keys extends string,
Obj extends Record<Keys, unknown>
>(obj: Obj & Record<Uppercase<keyof Obj & string>, unknown>) => obj
uppercaseed({ AA: 1 }) // ok
uppercaseed({ Aa: 1 }) // error
uppercaseed({ aa: 1 }) // error
Run Code Online (Sandbox Code Playgroud)
请看一下这个问题。几乎一样,你只需替换Lowercase为Upercase
| 归档时间: |
|
| 查看次数: |
1201 次 |
| 最近记录: |