Skip to content

Instantly share code, notes, and snippets.

@bkrmendy
Last active May 14, 2023 11:28
Show Gist options
  • Save bkrmendy/f4582173f50fab209ddfef1377ab31e3 to your computer and use it in GitHub Desktop.
Save bkrmendy/f4582173f50fab209ddfef1377ab31e3 to your computer and use it in GitHub Desktop.
eyedropper.d.ts
interface ColorSelectionOptions {
signal?: AbortSignal
}
interface ColorSelectionResult {
sRGBHex: string
}
interface EyeDropper {
open: (options?: ColorSelectionOptions) => Promise<ColorSelectionResult>
}
interface EyeDropperConstructor {
new (): EyeDropper
}
interface Window {
EyeDropper?: EyeDropperConstructor | undefined
}
@EskiMojo14
Copy link

EskiMojo14 commented May 5, 2023

just a note that this is typed incorrectly - EyeDropper should not extend EyeDropperConstructor.
that allows you to do some incorrect things:

EyeDropper.open()

const ed = new EyeDropper()
const ed2 = new ed()

instead, Window.EyeDropper should be set to EyeDropperConstructor.

interface ColorSelectionOptions {
  signal?: AbortSignal
}

interface ColorSelectionResult {
  sRGBHex: string
}

interface EyeDropper {
  open: (options?: ColorSelectionOptions) => Promise<ColorSelectionResult>
}

interface EyeDropperConstructor {
  new (): EyeDropper
}

interface Window {
  EyeDropper?: EyeDropperConstructor | undefined
}

(i've also removed the default parameter for options, as they shouldn't be provided when defining a type, and marked signal as optional)

@bkrmendy
Copy link
Author

Thanks! I've updated the gist to reflect your changes. Hopefully we'll get official support for this soon.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment