JSON Parser
约 241 字小于 1 分钟
2026-02-11
题目
You're required to implement a type-level partly parser to parse JSON string into a object literal type.
Requirements:
NumbersandUnicode escape (\uxxxx)in JSON can be ignored. You needn't to parse them.
解题思路
待补充
答案
type Pure<T> = {
[P in keyof T]: T[P] extends object ? Pure<T[P]> : T[P]
}
type SetProperty<T, K extends PropertyKey, V> = {
[P in (keyof T) | K]: P extends K ? V : P extends keyof T ? T[P] : never
}
type Token = any
type ParseResult<T, K extends Token[]> = [T, K]
type Tokenize<T extends string, S extends Token[] = []> = Token[]
type ParseLiteral<T extends Token[]> = ParseResult<any, T>
type Parse<T extends string> = Pure<ParseLiteral<Tokenize<T>>[0]>验证
import type { Equal, Expect } from '@type-challenges/utils'
type cases = [
Expect<Equal<(
Parse<`
{
"a": "b",
"b": false,
"c": [true, false, "hello", {
"a": "b",
"b": false
}],
"nil": null
}
`>
), (
{
nil: null
c: [true, false, 'hello', {
a: 'b'
b: false
}]
b: false
a: 'b'
}
)>>,
Expect<Equal<Parse<'{}'>, {}>>,
Expect<Equal<Parse<'[]'>, []>>,
Expect<Equal<Parse<'[1]'>, never>>,
Expect<Equal<Parse<'true'>, true>>,
Expect<Equal<
Parse<'["Hello", true, false, null]'>,
['Hello', true, false, null]
>>,
Expect<Equal<
(
Parse<`
{
"hello\\r\\n\\b\\f": "world"
}`>
), (
{
'hello\r\n\b\f': 'world'
}
)
>>,
Expect<Equal<Parse<'{ 1: "world" }'>, never>>,
Expect<Equal<Parse<`{ "hello
world": 123 }`>, never>>,
]参考
无
