Typescript: рдХреГрдкрдпрд╛ Notification.requestPermission () рдЬреЛрдбрд╝реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 11 рдордИ 2015  ┬╖  19рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: microsoft/TypeScript

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╡реИрд╕реЗ, рдореИрдВрдиреЗ Notification рд▓рд┐рдП рдПрдХ рдЕрджреНрдпрддрди рд╡рд┐рдЪрд▓рди рдХрд┐рдпрд╛ рд╣реИ:

type NotificationPermission = "default" | "denied"| "granted";

type NotificationDirection = "auto" | "ltr" | "rtl";

interface NotificationPermissionCallback {
    (permission: NotificationPermission): void;
}

interface NotificationOptions {
    dir?: NotificationDirection;
    lang?: string;
    body?: string;
    tag?: string;
    image?: string;
    icon?: string;
    badge?: string;
    sound?: string;
    vibrate?: number | number[],
    timestamp?: number,
    renotify?: boolean;
    silent?: boolean;
    requireInteraction?: boolean;
    data?: any;
    actions?: NotificationAction[]
}

interface NotificationAction {
    action: string;
    title: string;
    icon?: string;
}

declare class Notification extends EventTarget {
    constructor(title: string, options?: NotificationOptions);

    static readonly permission: NotificationPermission;
    static requestPermission(): Promise<NotificationPermission>;
    static requestPermission(deprecatedCallback: NotificationPermission): void;

    static readonly maxActions: number;

    onclick: EventListenerOrEventListenerObject;
    onerror: EventListenerOrEventListenerObject;

    readonly title: string;
    readonly dir: NotificationDirection;
    readonly lang: string;
    readonly body: string;
    readonly tag: string;
    readonly image: string;
    readonly icon: string;
    readonly badge: string;
    readonly sound: string;
    readonly vibrate: number[];
    readonly timestamp: number;
    readonly renotify: boolean;
    readonly silent: boolean;
    readonly requireInteraction: boolean;
    readonly data: any;
    readonly actions: NotificationAction[]
}

рд╕рднреА 19 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╣рдо рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЧреИрд░-рдорд╛рдирдХреАрдХреГрдд рдЪреАрдЬреЛрдВ рдХреЛ lib.d.ts рдореЗрдВ рди рдбрд╛рд▓реЗрдВред

рдЖрдк рд╣рдореЗрд╢рд╛ рдЕрдкрдиреЗ .d.ts рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЗрди APIs рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдХреНрдпрд╛ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдПрдкреАрдЖрдИ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдорд╛рдирдХ рдирд╣реАрдВ рд╣реИ? https://notifications.spec.whatwg.org/

рдЪреВрдВрдХрд┐ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рдПрдкреАрдЖрдИ рд╡реЗрдм рд╡рд░реНрдХрд░реНрд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдореИрдВ рдЙрдореНрдореАрдж рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдорд╛рдирдХ рд▓рд┐рдмрд╛рд╕ (рдЬреИрд╕реЗ рдирдП рдЯреАрдПрд╕ 1.9 --lib рд╡рд┐рдХрд▓реНрдк) рдХреЗ рд╕рд╛рде рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛред

рдпрд╣ 13 рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рдмрдВрдж рд╣реБрдЖ рдерд╛, рдЬрдм Notification рдорд╛рдирдХ рд╕реЗ рдерд╛ред

рдЗрд╕реЗ рдЯреАрдПрд╕-рд▓рд┐рдм-рдЬреЗрдирд░реЗрдЯрд░ рдореЗрдВ рдпреЛрдЧрджрд╛рди рджреЗрдХрд░ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж @kitsonk рдореИрдВ рдпреЛрдЧрджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП TS- addedTypes.json рдлрд╝рд╛рдЗрд▓ (рдпреЛрдЧрджрд╛рди рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рд░рд╛рдЬреНрдп рдХреЗ рд░реВрдк рдореЗрдВ) рдореЗрдВ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд╕реНрдерд┐рд░ / рдЖрд╕рд╛рдиреА рд╕реЗ рдирд┐рд░реНрдорд┐рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдЧреБрдг рд╣реИрдВред

рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдШреЛрд╖рдгрд╛ рд╣реИ:

interface NotificationOptions {
    dir?: DOMString;
    lang?: DOMString;
    body?: DOMString;
    tag?: DOMString;
    icon?: USVString;
    data?: any;
    vibrate?: number[];
    renotify?: boolean;
    silent?: boolean;
    sound?: USVString;
    noscreen?: boolean;
    sticky?: boolean;
}

interface Notification {
    readonly title: DOMString;
    readonly dir: DOMString;
    readonly lang: DOMString;
    readonly body: DOMString;
    readonly tag: DOMString;
    readonly icon: USVString;
    readonly data: any;
    readonly silent: boolean;
    readonly timestamp: DOMTimeStamp;
    readonly noscreen: boolean;
    readonly renotify: boolean;
    readonly sound: USVString;
    readonly sticky: boolean;
    readonly vibrate: number[];
    onclick: Function;
    onerror: Function;
    close(): void;
}

declare var Notification: {
    prototype: Notification;
    readonly permission: DOMString;
    new(title: string, options?: NotificationOptions): Notification;
    requestPermission(): Promise<DOMString>;
}

рдореИрдВ рдереЛрдбрд╝рд╛ рд╣реИрд░рд╛рди рд╣реВрдВ рдХрд┐ рдпрд╣ рдЕрднреА рддрдХ рдЦрддреНрдо рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдорд╛рд╕реНрдЯрд░ рдХреЛ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИред рдпрд╣ рдПрдЬ 14 рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдЬ рдХреЗ рд▓рд┐рдП рдЖрдИрдбреАрдПрд▓ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдЗрд╕реЗ рдмрд┐рдирд╛ рдУрд╡рд░рд░рд╛рдЗрдб рдХреЗ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ... рдореБрдЭреЗ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдкрддрд╛ рд╣реИ, рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рд▓реЗрдХрд┐рди рдПрдЬ рдХреЗ рдЖрдИрдбреАрдПрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рдкрд░ рдирдП рдПрдкреАрдЖрдИ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдХреНрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЖрдИрдбреАрдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХреНрдпрд╛ рдпрд╣ рдХреЗрд╡рд▓ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)?

рдЖрд╣, рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЖрдИрдбреАрдПрд▓ рд╡рд░реНрддрдорд╛рди рдореЗрдВ 4 рдорд╣реАрдиреЗ рдХрд╛ рд╣реИ ... рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡реЗ "рдПрдЬ 13" рд╡рд╛рд▓реЗ рд╣реИрдВред @zhengbli рдХрд┐рддрдиреА рдмрд╛рд░ / рдЬрдм рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ?

рд╣рдо рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡рд┐рдВрдбреЛрдЬрд╝ 10 рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд╕рд╛рде рдПрдЬ рд╕реНрдкреЗрдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд▓реЗрддреЗ рдереЗ, рдЗрд╕рд▓рд┐рдП рдЕрдВрддрд┐рдо рдЕрдкрдбреЗрдЯ TH2 рдХреЗ рд╕рдорд╛рди рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдореБрджрд╛рдп рд╕реЗ рд╡реНрдпрд░реНрде рдкреНрд░рдпрд╛рд╕реЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд▓рдЧрд╛рддрд╛рд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдм рдпрд╣ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд╣рдо рдПрдХ рдорд╛рд╕рд┐рдХ рдЕрдкрдбреЗрдЯ рд╣реЛрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рдПрдЬ рдЯреАрдо рдХреЗ рдкрд╛рд╕ рд▓реЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, NotificationOptions рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╡реАрдирддрдо рдПрдЬ рдмрд┐рд▓реНрдб рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред рдЗрд╕реЗ рдЕрдЧрд▓реЗ рдЕрдкрдбреЗрдЯ рдХреЛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдЬрд▓реНрдж рд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@zhengbli рдХреНрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рд╣реИ?

рд╡реИрд╕реЗ, рдореИрдВрдиреЗ Notification рд▓рд┐рдП рдПрдХ рдЕрджреНрдпрддрди рд╡рд┐рдЪрд▓рди рдХрд┐рдпрд╛ рд╣реИ:

type NotificationPermission = "default" | "denied"| "granted";

type NotificationDirection = "auto" | "ltr" | "rtl";

interface NotificationPermissionCallback {
    (permission: NotificationPermission): void;
}

interface NotificationOptions {
    dir?: NotificationDirection;
    lang?: string;
    body?: string;
    tag?: string;
    image?: string;
    icon?: string;
    badge?: string;
    sound?: string;
    vibrate?: number | number[],
    timestamp?: number,
    renotify?: boolean;
    silent?: boolean;
    requireInteraction?: boolean;
    data?: any;
    actions?: NotificationAction[]
}

interface NotificationAction {
    action: string;
    title: string;
    icon?: string;
}

declare class Notification extends EventTarget {
    constructor(title: string, options?: NotificationOptions);

    static readonly permission: NotificationPermission;
    static requestPermission(): Promise<NotificationPermission>;
    static requestPermission(deprecatedCallback: NotificationPermission): void;

    static readonly maxActions: number;

    onclick: EventListenerOrEventListenerObject;
    onerror: EventListenerOrEventListenerObject;

    readonly title: string;
    readonly dir: NotificationDirection;
    readonly lang: string;
    readonly body: string;
    readonly tag: string;
    readonly image: string;
    readonly icon: string;
    readonly badge: string;
    readonly sound: string;
    readonly vibrate: number[];
    readonly timestamp: number;
    readonly renotify: boolean;
    readonly silent: boolean;
    readonly requireInteraction: boolean;
    readonly data: any;
    readonly actions: NotificationAction[]
}

рдЕрдЪреНрдЫрд╛ рдХрд╛рд░реНрдп! рдореИрдВрдиреЗ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рд╕реБрдзрд╛рд░ рджрд┐рдпрд╛: рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╡рд░реНрдЧ рдкрд░ 'рдХрд░реАрдм' рд╡рд┐рдзрд┐ рдЧрд╛рдпрдм рдереА, рдФрд░ рдкрджрд╛рд╡рдирдд рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рдирд╣реАрдВ рдереАред

type NotificationPermission = "default" | "denied" | "granted";

type NotificationDirection = "auto" | "ltr" | "rtl";

interface NotificationPermissionCallback {
    (permission: NotificationPermission): void;
}

interface NotificationOptions {
    dir?: NotificationDirection;
    lang?: string;
    body?: string;
    tag?: string;
    image?: string;
    icon?: string;
    badge?: string;
    sound?: string;
    vibrate?: number | number[],
    timestamp?: number,
    renotify?: boolean;
    silent?: boolean;
    requireInteraction?: boolean;
    data?: any;
    actions?: NotificationAction[]
}

interface NotificationAction {
    action: string;
    title: string;
    icon?: string;
}

declare class Notification extends EventTarget {
    constructor(title: string, options?: NotificationOptions);

    static readonly permission: NotificationPermission;
    static requestPermission(): Promise<NotificationPermission>;
    static requestPermission(deprecatedCallback: (permission: NotificationPermission) => void): void;

    static readonly maxActions: number;

    onclick: EventListenerOrEventListenerObject;
    onerror: EventListenerOrEventListenerObject;

    close(): void;

    readonly title: string;
    readonly dir: NotificationDirection;
    readonly lang: string;
    readonly body: string;
    readonly tag: string;
    readonly image: string;
    readonly icon: string;
    readonly badge: string;
    readonly sound: string;
    readonly vibrate: number[];
    readonly timestamp: number;
    readonly renotify: boolean;
    readonly silent: boolean;
    readonly requireInteraction: boolean;
    readonly data: any;
    readonly actions: NotificationAction[]
}

рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рджреЗрдЦреЗрдВ https://github.com/Microsoft/TSJS-lib-generator/blob/cd60588b72a9188e89346b3c440a76508b4c0e76/baselines/dom.generated.d.ts#L8360 -L8381

рдЖрдк рдПрдХреНрд╢рди рдХреНрд▓рд┐рдХ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ?

@ mwent-cray StackOverflow рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрдЧрд╣ рд╣реИред

@marcovdb @mhegazy рдЯреАрдПрд╕ 2.4 рдореЗрдВ рдЕрднреА рднреА рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИ? рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рдвреВрдВрдв рд╕рдХрддрд╛ рд╣реВрдВ: - |

https://github.com/Microsoft/TypeScript/blob/master/src/lib/dom.generated.d.ts

рд╣рд╛рдБред рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдлрд╛рдЗрд▓ рдореЗрдВ рд╣реИред

https://github.com/Microsoft/TypeScript/blob/master/src/lib/webworker.generated.d.ts

@marcovdb рдПрдХ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдереНрд░реЗрдб рдореЗрдВ рдЖрдкрдХреА рдЕрдВрддрд┐рдо рдкреЛрд╕реНрдЯ рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╕реЗ рдЕрд▓рдЧ рдХреНрдпреЛрдВ рд╣реИ?

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВред рдЖрдкрдХреЛ рдЙрд╕ рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рдкреВрдЫрдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдпреЛрдЧрджрд╛рди рджрд┐рдпрд╛ рд╣реИред рд╡рд╣ @zhengbli рд╣реЛрдЧрд╛ред

@zhengbli NotificationOptions рд╕рднреА 5 рдХреНрдпреЛрдВ рдЫреЛрдбрд╝ рджрд┐рдП рдЧрдП? ЁЯШЮ

@ialexryan рдХреГрдкрдпрд╛ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рджрд░реНрдЬ рдХрд░реЗрдВ рдФрд░ рд╣рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╕рдВрджрд░реНрдн рджреЗрдВ, рдФрд░ рдореБрдЭреЗ рдЗрд╕реЗ рджреЗрдЦрдХрд░ рдЦреБрд╢реА рд╣реЛрдЧреАред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

remojansen picture remojansen  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

blendsdk picture blendsdk  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

kyasbal-1994 picture kyasbal-1994  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

uber5001 picture uber5001  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Zlatkovsky picture Zlatkovsky  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ