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, который включает определения для этих API.

Разве API уведомлений не является стандартом? https://notifications.spec.whatwg.org/

Поскольку API уведомлений является частью Web Workers, я бы ожидал, что он будет определен в одной из стандартных библиотек (например, с новой опцией TS 1.9 --lib ).

Это было закрыто более 13 месяцев назад, когда Notification было от стандарта.

Эту проблему можно решить, внося свой вклад в TS-Lib-Generator .

Спасибо @kitsonk Я посмотрел на TS-Lib-Generator, чтобы внести свой вклад, но я не мог предположить правильный подход для добавления типа уведомления в файл 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>;
}

Немного удивлен, что это еще не дошло, хотя я не смотрел на мастера. Он находится в Edge 14, поэтому IDL для Edge должны отражать это, что должно генерировать его без переопределений ... Я не знаю достаточно о специфике, но новые API-интерфейсы автоматически появляются при добавлении в IDL Edge и какая версия IDL используются при сборке (это только выпущено)?

Ах, я вижу, IDL для браузеров в настоящее время 4 месяца назад ... что означает, что, скорее всего, это "Edge 13". @zhengbli как часто / когда вы их обновляете?

Раньше мы брали файлы спецификаций Edge вместе с официальными выпусками Windows 10, поэтому последнее обновление было таким же, как TH2. Однако сейчас имеет больше смысла делать более частые обновления, чтобы избежать напрасных усилий сообщества, мы обращаемся к команде Edge, пытаясь сделать ежемесячное обновление. Кроме того, NotificationOptions действительно доступен в последней сборке Edge. Это должно быть освещено в следующем обновлении, которое должно быть скоро.

@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[]
}

Отличная работа! Я немного улучшил его: отсутствовал метод close в классе Notification, а определение устаревшего метода requestPermission было не совсем правильным.

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 Есть ли определения уведомлений в TS 2.4? Потому что я не могу найти его там: - |

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

@marcovdb есть ли причина, по которой интерфейс отличается от кода, упомянутого в вашем последнем сообщении в ветке?

Извините, не знаю. Вам нужно будет спросить человека, который на самом деле дал определения. Это будет @zhengbli.

@zhengbli, почему все, кроме 5, NotificationOptions пропущены? 😞

@ialexryan, пожалуйста, напишите новый выпуск и

Была ли эта страница полезной?
0 / 5 - 0 рейтинги