microsoft / microsoft/TypeScript
Structural Comparison of Circular Tuples
@weswigham arbeitet bereits daran.
Seit 16.3.2020.
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.4k
- Ø Merge
- 1 T. 19 Std.
- Gemergte PRs (30 T.)
- 117
Beschreibung
TypeScript Version: 3.8.2
Search Terms: structure, resolve, compare, equality, type, mismatch, circular, tuple, cycle, recursive
Code
I'm trying to represent some type information for runtime use. I define the following enum:
enum Type {
Int = "Int",
List = "List",
}
And I define a Codec type: a tuple, within which the first element is the given Type enum value, and the second element––which is optional––is another Codec:
type Codec<
T extends Type,
C extends Codec<Type> | undefined = undefined
> = C extends undefined ? [T] : [T, C];
I'm able to assign Codecs as expected:
const c1: Codec<Type.Int> = [Type.Int];
const c2: Codec<Type.List, Codec<Type.Int>> = [Type.List, [Type.Int]];
And I'm able to create helpers for the Type.Int Codec:
type IntCodec = Codec<Type.Int>;
const createIntCodec = (): IntCodec => [Type.Int];
const intCodec = createIntCodec(); // signature is `[Type.Int]`
However, I'm unable to create helpers for Codecs which nest other Codecs:
type ListCodec<C extends Codec<Type>> = Codec<Type.List, C>;
const createListCodec = <C extends Codec<Type>>(of: C): ListCodec<C> => [Type.List, of]; // error
This results in an error: Type '[Type.List, C]' is not assignable to type 'Codec<Type.List, C>'. ts(2322).
Any thoughts would be greatly appreciated! Thank you!
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Bewertung
Dieses Issue wurde noch nicht bewertet.