Eyas's Blog

Occasional musings on software development, tech, the Middle East, and anything else.

Software Archives | Page 3 of 4

Schema.org Classes in TypeScript: Properties and Special Cases

In our quest to model Schema.org classes in TypeScript, we've so far managed to model the type hierarchy , scalar DataType values , and enums . The big piece that remains, however, is representing what's actually inside of the class: it's properties. After all, what it means for a JSON-LD literal to have "@type" equal to "Person" is that certain properties — e.g. "birthPlace" or…

Read more →

Schema.org DataType in TypeScript: Structural Typing Doesn't Cut It

Schema.org has a concept of a DataType , things like Text , Number , Date , etc. In JSON-LD, we represent these as strings or numbers, rather than array or object literals. This data could describe the name of a Person , a check-in date and time for a LodgingReservation , a URL of a Corporation , publication date of an Article , etc. As we'll see, the Schema.org DataType hierarchy is far…

Read more →

Schema.org Enumerations in TypeScript

Last time, we talked about modeling the Schema.org class hierarchy in TypeScript . We ended up with an elegant, recursive solution that treats any type Thing as a "@type" -discriminated union of ThingLeaf and all the direct sub-classes of the type. The next challenge in the journey of building TypeScript typings for the Schema.org vocabulary is modeling Enumeration s. Learning from Examples…

Read more →

Modeling Schema.org Schema with TypeScript: The Power and Limitations of the TypeScript Type System

Recently, I published schema-dts ( npm , GitHub ), an open source library that models JSON-LD Schema.org in TypeScript. A big reason I wanted to do this project is because I knew some TypeScript type system features, such as discriminated type unions, powerful type inference, nullability checking, and type intersections, present an opportunity to both model what Schema.org-conformant JSON-LD…

Read more →

About those Side-effects in Observables, an Angular Use Case

When testing a codebase in Angular Ivy, I ran into a bunch of test failures I wasn't seeing before. ExpressionChangedAfterItHasBeenCheckedError s were being thrown around. In debugging these failures, I found that many of them are the results of side-effects in Observables and Observable pipe operations. I happened to describe these earlier in my piece on Observables, Side-effects, and…

Read more →