Sometimes it is desired to forbid certain types from being considered.
Example: JSON.stringify(function() {}); doesn't make sense and the chance is high it's written like this by mistake. With negated types we could eliminate a chance of it.
type Serializable = any ~ Function; // or simply ~ Function
declare interface JSON {
stringify(value: Serializable): string;
}
Another example
export NonIdentifierExpression = ts.Expression ~ ts.Identifier
Sometimes it is desired to forbid certain types from being considered.
Example:
JSON.stringify(function() {});doesn't make sense and the chance is high it's written like this by mistake. With negated types we could eliminate a chance of it.Another example