Мы стараемся не помещать нестандартные вещи в 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
Да. Это в другом файле.
https://github.com/Microsoft/TypeScript/blob/master/src/lib/webworker.generated.d.ts
@marcovdb есть ли причина, по которой интерфейс отличается от кода, упомянутого в вашем последнем сообщении в ветке?
Извините, не знаю. Вам нужно будет спросить человека, который на самом деле дал определения. Это будет @zhengbli.
@zhengbli, почему все, кроме 5, NotificationOptions
пропущены? 😞
@ialexryan, пожалуйста, напишите новый выпуск и
Самый полезный комментарий
Кстати, я сделал обновленное определение для
Notification
: