In TypeScript there are several ways to declare a property with ``++undefined++`` value: adding ``++| undefined++`` in the property type or using optional property syntax (``++?++`` after its name). Use ``++| undefined++`` syntax when you want to be explicit that an object has that property, in that case TypeScript compiler will not allow omitting it: ---- interface Person { name: string; address: string | undefined; } let John = { name: "John" }; // will not compile let John = { name: "John", address: undefined }; // will compile, we want to be explicit when person does not have home ---- Use optional property syntax for properties holding some additional information. ---- interface Person { name: string; pet?: string; } let John = { name: "John" }; // will compile let John = { name: "John", pet: undefined }; // will compile, there is no pet like for the object on previous line let John = { name: "John", pet: "Benji" }; // will compile ---- Using ``++| undefined++`` for optional property is redundant, it can be omitted without change to the actual type. Still if you want to force the property in the object consider using only ``++| undefined++`` without ``++?++``. == Noncompliant Code Example ---- interface Person { name: string; address? : string | undefined; // Noncompliant, "?" should be removed pet?: Animal | undefined; // Noncompliant, "undefined" should be removed } ---- == Compliant Solution ---- interface Person { name: string; address: string | undefined; pet?: Animal; } ---- ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) include::message.adoc[] include::highlighting.adoc[] endif::env-github,rspecator-view[]