Typescript: Veuillez ajouter Notification.requestPermission ()

Créé le 11 mai 2015  ·  19Commentaires  ·  Source: microsoft/TypeScript

Commentaire le plus utile

Au fait, j'ai fait une mise à jour de la définition pour 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[]
}

Tous les 19 commentaires

Nous essayons de ne pas mettre de choses non standardisées dans lib.d.ts.

Vous pouvez toujours inclure vous-même un fichier .d.ts qui comprend des définitions pour ces API.

L'API de notification n'est-elle pas réellement une norme? https://notifications.spec.whatwg.org/

Puisque l'API de notification fait partie de Web Workers, je m'attendrais à ce qu'elle soit définie dans l'une des bibliothèques standard (par exemple avec la nouvelle option TS 1.9 --lib ).

Cela a été fermé il y a plus de 13 mois, lorsque Notification était de la norme.

Cela peut être résolu en contribuant au TS-Lib-Generator .

Merci @kitsonk J'ai addedTypes.json (comme l'indiquent les directives de contribution), car le l'interface a des propriétés statiques / en lecture seule non couvertes par le script de construction.

Voici la déclaration nécessaire:

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

Je suis un peu surpris qu'il ne soit pas encore arrivé, même si je n'ai pas regardé le maître. C'est dans Edge 14, donc les IDL pour Edge devraient refléter cela, ce qui devrait le générer sans substitutions ... Je ne sais pas assez, sur les détails, mais les nouvelles API apparaissent automatiquement lorsqu'elles sont ajoutées aux IDL d'Edge et quelle version de les IDL sont utilisés lors de la construction (est-il seulement publié)?

Ah, je vois, les IDL des navigateurs ont actuellement 4 mois ... ce qui veut dire qu'il s'agit probablement de "Edge 13". @zhengbli à quelle fréquence / quand les mettez-vous à jour?

Nous avions l'habitude de prendre les fichiers de spécifications Edge avec les versions officielles de Windows 10, donc la dernière mise à jour était la même que TH2. Cependant, il est plus logique maintenant de faire une mise à jour plus fréquente pour éviter les efforts inutiles de la communauté, nous prenons à l'équipe Edge d'essayer de faire une mise à jour mensuelle. De plus, NotificationOptions est effectivement disponible dans la dernière version d'Edge. Il devrait être couvert la prochaine mise à jour, qui devrait être bientôt.

@zhengbli Y a-t-il une mise à jour sur ce problème?

Au fait, j'ai fait une mise à jour de la définition pour 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[]
}

Bon travail! Je l'ai un peu amélioré: la méthode 'close' de la classe Notification manquait, et la définition de la méthode obsolète requestPermission n'était pas entièrement correcte.

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

Comment surveillez-vous un clic d'action?

@ mwent-cray StackOverflow est l'endroit idéal pour les questions.

@marcovdb @mhegazy Les définitions de notification sont-elles toujours dans TS 2.4? Parce que je n'arrive pas à le trouver là-bas: - |

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

@marcovdb y a-t-il une raison pour laquelle l'interface est différente du code mentionné dans votre dernier message dans le fil?

Désolé, aucune idée. Il faudrait demander à la personne qui a réellement contribué aux définitions. Ce serait @zhengbli.

@zhengbli pourquoi tous les NotificationOptions ont-ils tous été omis sauf 5? 😞

@ialexryan veuillez déposer un nouveau problème et nous donner un peu de contexte sur le problème, et je serais heureux de l'examiner.

Cette page vous a été utile?
0 / 5 - 0 notes