Typescript: Harap tambahkan Notification.requestPermission ()

Dibuat pada 11 Mei 2015  ·  19Komentar  ·  Sumber: microsoft/TypeScript

Komentar yang paling membantu

Omong-omong, saya telah membuat definisi yang diperbarui untuk 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[]
}

Semua 19 komentar

Kami mencoba untuk tidak meletakkan hal-hal non-standar di lib.d.ts.

Anda selalu dapat menyertakan file .d.ts sendiri yang menyertakan definisi untuk API ini.

Bukankah API Pemberitahuan sebenarnya standar? https://notifications.spec.whatwg.org/

Karena Notification API adalah bagian dari Web Workers, saya berharap dapat menetapkannya di salah satu lib standar (misalnya dengan opsi TS 1.9 --lib ).

Ini ditutup lebih dari 13 bulan yang lalu, ketika Notification dari standar.

Ini dapat diatasi dengan berkontribusi ke TS-Lib-Generator .

Terima kasih @kitsonk. Saya telah melihat TS-Lib-Generator untuk berkontribusi tetapi saya tidak dapat menebak pendekatan yang benar untuk menambahkan jenis Pemberitahuan di file addedTypes.json (sebagai status pedoman kontribusi), karena antarmuka memiliki properti statis / hanya-baca yang tidak tercakup oleh skrip build.

Ini adalah pernyataan yang dibutuhkan:

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

Saya sedikit terkejut bahwa itu belum datang, meskipun saya belum melihat master. Itu ada di Edge 14, jadi IDL untuk Edge harus mencerminkan itu, yang harus menghasilkannya tanpa menimpa ... Saya tidak cukup tahu, tentang spesifikasinya, tetapi apakah API baru secara otomatis muncul ketika ditambahkan ke IDL Edge dan versi apa dari IDL digunakan saat membangun (apakah hanya dirilis)?

Ah, begitu, IDL browser saat ini berumur 4 bulan ... yang berarti kemungkinan besar mereka adalah "Edge 13". @ Zengbli seberapa sering / kapan Anda memperbaruinya?

Kami biasa mengambil file spesifikasi Edge bersama dengan rilis windows 10 resmi, oleh karena itu pembaruan terakhir sama dengan TH2. Namun, sekarang lebih masuk akal untuk melakukan pembaruan yang lebih sering untuk menghindari upaya yang sia-sia dari komunitas, kami membawa ke tim Edge mencoba membuat pembaruan bulanan terjadi. Selain itu, NotificationOptions memang tersedia di versi Edge terbaru. Ini harus dibahas pembaruan berikutnya, yang harus segera.

@ Zengbli Apakah ada pembaruan tentang masalah ini?

Omong-omong, saya telah membuat definisi yang diperbarui untuk 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[]
}

Kerja bagus! Saya sedikit memperbaikinya: metode 'tutup' pada kelas Notification tidak ada, dan definisi untuk metode requestPermission yang tidak digunakan lagi tidak sepenuhnya benar.

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

Bagaimana Anda melihat aksi klik?

@ mwent-cray StackOverflow adalah tempat untuk bertanya.

@marcovdb @mhegazy adalah definisi Pemberitahuan masih dalam TS 2.4? Karena saya tidak bisa menemukannya di sana: - |

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

@marcovdb adakah alasan mengapa antarmuka berbeda dari kode yang disebutkan dalam posting terakhir Anda di utas?

Maaf, tidak tahu. Anda harus bertanya kepada orang yang benar-benar menyumbangkan definisi. Itu akan menjadi @zhengbli.

@zhengbli mengapa semua kecuali 5 dari NotificationOptions dihilangkan? 😞

@ialexryan mohon ajukan masalah baru dan beri kami konteks tentang masalah tersebut, dan saya akan dengan senang hati memeriksanya.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat