Skip to content

Consider a pattern for dictionary arguments which must have at least one member #903

Open
@domenic

Description

@domenic

This is a continuation of #130.

There are a number of places on the platform that end up marking their dictionary arguments as "optional", even though they're not really optional. They just have a requirement that can't be expressed in IDL today: at least one member must be present. Examples:

I think we might have reached the point where it's worth making this pattern first-class. It would remove a bit of spec boilerplate in each spec, and it would make the IDL less confusing for readers (see e.g. whatwg/dom#332).

I suggest something like

partial interface MutationObserver {
  void observe(Node target, [OneMemberRequired] MutationObserverInit options);
};

I believe this explicitness sidesteps the problems mentioned in #130, where we were worried that people would not properly mark truly-optional trailing dictionaries as optional. You have to really know what you're doing to use this kind of extended attribute.

We could also use a keyword (onememberrequired MutationObserverInit options) for symmetry with optional. In general the dividing line between syntax and extended attributes is kind of blurry in Web IDL; see some discussion in #857 (comment).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions