Typescript: Adicione Notification.requestPermission ()

Criado em 11 mai. 2015  ·  19Comentários  ·  Fonte: microsoft/TypeScript

Comentários muito úteis

A propósito, fiz uma definição atualizada para 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[]
}

Todos 19 comentários

Tentamos não colocar coisas não padronizadas em lib.d.ts.

Você sempre pode incluir um arquivo .d.ts que inclua definições para essas APIs.

A API de notificação não é realmente um padrão? https://notifications.spec.whatwg.org/

Como a API de notificação faz parte do Web Workers, eu esperaria tê-la definida em uma das bibliotecas padrão (por exemplo, com a nova opção TS 1.9 --lib ).

Isso foi fechado há mais de 13 meses, quando Notification era padrão.

Isso pode ser resolvido contribuindo para o TS-Lib-Generator .

Obrigado @kitsonk. Eu addedTypes.json (como as diretrizes de contribuição indicam), uma vez que o interface tem propriedades estáticas / somente leitura não cobertas pelo script de construção.

Esta é a declaração necessária:

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>;
}

Estou um pouco surpreso que ainda não tenha acontecido, embora não tenha olhado para o mestre. Está no Edge 14, então os IDLs para o Edge devem refletir isso, o que deve gerá-lo sem substituições ... Não sei o suficiente sobre os detalhes, mas novas APIs aparecem automaticamente quando adicionadas aos IDLs do Edge e qual versão do os IDLs são usados ​​na construção (são apenas liberados)?

Ah, entendo, os IDLs do navegador têm atualmente 4 meses ... o que significa que é provável que sejam "Edge 13". @zhengbli com que frequência / quando você os atualiza?

Costumávamos levar os arquivos de especificação do Edge junto com as versões oficiais do Windows 10, portanto, a última atualização foi a mesma do TH2. No entanto, faz mais sentido agora fazer uma atualização mais frequente para evitar o desperdício de esforços da comunidade, estamos levando para a equipe do Edge para tentar fazer uma atualização mensal acontecer. Além disso, NotificationOptions está realmente disponível na versão mais recente do Edge. Deve ser coberto na próxima atualização, que deve ser em breve.

@zhengbli Existe alguma atualização sobre esse problema?

A propósito, fiz uma definição atualizada para 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[]
}

Ótimo trabalho! Eu melhorei um pouco: o método 'close' na classe Notification estava faltando, e a definição para o método requestPermission obsoleto não estava totalmente correto.

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

Como você observa um clique de ação?

@mwent-cray StackOverflow é o lugar para fazer perguntas.

@marcovdb @mhegazy As definições de notificação ainda estão em TS 2.4? Porque não consigo encontrar lá: - |

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

@marcovdb existe uma razão pela qual a interface é diferente do código mencionado em sua última postagem no tópico?

Desculpe, não faço ideia. Você teria que perguntar à pessoa que realmente contribuiu com as definições. Isso seria @zhengbli.

@zhengbli, por que todos os NotificationOptions omitidos, exceto 5? 😞

@ialexryan, envie um novo problema e nos dê um contexto sobre o assunto, e eu ficaria feliz em analisá-lo.

Esta página foi útil?
0 / 5 - 0 avaliações