import { scope } from "arktype"
export const baseMeta = scope({
BaseMeta: {
"description?": "string",
}
});
/// Method #1: import
const binaryMeta1 = scope({
...baseMeta.import(),
Binary: {
"...": "BaseMeta",
popKind: "'binary'",
},
Bitwise: {
"...": "Binary",
popKind: "'bitwise'",
},
ArkMeta: "Binary | Bitwise"
}).export();
// Method #2: inline
const binaryMeta2 = scope({
BaseMeta: {
"description?": "string",
},
Binary: {
"...": "BaseMeta",
popKind: "'binary'",
},
Bitwise: {
"...": "Binary",
popKind: "'bitwise'",
},
ArkMeta: "Binary | Bitwise"
}).export();
export const ArkMeta1 = binaryMeta1.ArkMeta;
type ArkMeta1 = typeof ArkMeta1.infer;
export const ArkMeta2 = binaryMeta2.ArkMeta;
type ArkMeta2 = typeof ArkMeta2.infer;
// This causes error: Return type annotation circularly references itself ts(2577)
declare global {
interface ArkEnv {
meta(): ArkMeta1
}
}
// // This is fine:
declare global {
interface ArkEnv {
meta(): ArkMeta2
}
}
Report a bug
π Search Terms
ArkEnv, scope import
π§© Context
"arktype": "2.2.1",
"@ark/schema": "0.56.0"
"typescript": "^6.0.3"
π§βπ» Repro
Playground Link: https://arktype.io/playground?code=import%2520%257B%2520scope%2520%257D%2520from%2520%2522arktype%2522%250A%250Aexport%2520const%2520baseMeta%2520%253D%2520scope%28%257B%250A%2520%2520%2520%2520BaseMeta%253A%2520%257B%250A%2520%2520%2520%2520%2520%2520%2520%2520%2522description%253F%2522%253A%2520%2522string%2522%252C%250A%2520%2520%2520%2520%257D%250A%257D%29%253B%250A%250A%252F%252F%252F%2520Method%2520%25231%253A%2520import%2520%250Aconst%2520binaryMeta1%2520%253D%2520scope%28%257B%250A%2520%2520%2520%2520...baseMeta.import%28%29%252C%250A%2520%2520%2520%2520Binary%253A%2520%257B%250A%2520%2520%2520%2520%2520%2520%2520%2520%2522...%2522%253A%2520%2522BaseMeta%2522%252C%250A%2520%2520%2520%2520%2520%2520%2520%2520popKind%253A%2520%2522%27binary%27%2522%252C%250A%2520%2520%2520%2520%257D%252C%250A%2520%2520%2520%2520Bitwise%253A%2520%257B%250A%2520%2520%2520%2520%2520%2520%2520%2520%2522...%2522%253A%2520%2522Binary%2522%252C%250A%2520%2520%2520%2520%2520%2520%2520%2520popKind%253A%2520%2522%27bitwise%27%2522%252C%250A%2520%2520%2520%2520%257D%252C%250A%2520%2520%2520%2520ArkMeta%253A%2520%2522Binary%2520%257C%2520Bitwise%2522%250A%257D%29.export%28%29%253B%250A%250A%252F%252F%2520Method%2520%25232%253A%2520inline%250Aconst%2520binaryMeta2%2520%253D%2520scope%28%257B%250A%2520%2520%2520%2520BaseMeta%253A%2520%257B%250A%2520%2520%2520%2520%2520%2520%2520%2520%2522description%253F%2522%253A%2520%2522string%2522%252C%250A%2520%2520%2520%2520%257D%252C%250A%2520%2520%2520%2520Binary%253A%2520%257B%250A%2520%2520%2520%2520%2520%2520%2520%2520%2522...%2522%253A%2520%2522BaseMeta%2522%252C%250A%2520%2520%2520%2520%2520%2520%2520%2520popKind%253A%2520%2522%27binary%27%2522%252C%250A%2520%2520%2520%2520%257D%252C%250A%2520%2520%2520%2520Bitwise%253A%2520%257B%250A%2520%2520%2520%2520%2520%2520%2520%2520%2522...%2522%253A%2520%2522Binary%2522%252C%250A%2520%2520%2520%2520%2520%2520%2520%2520popKind%253A%2520%2522%27bitwise%27%2522%252C%250A%2520%2520%2520%2520%257D%252C%250A%2520%2520%2520%2520ArkMeta%253A%2520%2522Binary%2520%257C%2520Bitwise%2522%250A%257D%29.export%28%29%253B%250A%250Aexport%2520const%2520ArkMeta1%2520%253D%2520binaryMeta1.ArkMeta%253B%250Atype%2520ArkMeta1%2520%253D%2520typeof%2520ArkMeta1.infer%253B%250A%250Aexport%2520const%2520ArkMeta2%2520%253D%2520binaryMeta2.ArkMeta%253B%250Atype%2520ArkMeta2%2520%253D%2520typeof%2520ArkMeta2.infer%253B%250A%250A%250A%252F%252F%2520This%2520causes%2520error%253A%2520Return%2520type%2520annotation%2520circularly%2520references%2520itself%2520ts%282577%29%250Adeclare%2520global%2520%257B%250A%2520%2520%2520%2520interface%2520ArkEnv%2520%257B%250A%2520%2520%2520%2520%2520%2520%2520%2520meta%28%29%253A%2520ArkMeta1%250A%2520%2520%2520%2520%257D%250A%257D%250A%250A%252F%252F%2520%252F%252F%2520This%2520is%2520fine%253A%2520%250Adeclare%2520global%2520%257B%250A%2520%2520%2520%2520interface%2520ArkEnv%2520%257B%250A%2520%2520%2520%2520%2520%2520%2520%2520meta%28%29%253A%2520ArkMeta2%250A%2520%2520%2520%2520%257D%250A%257D%250A