gpt4 book ai didi

javascript - AngularJS + typescript : Write a Service Worker in Typescript

转载 作者:搜寻专家 更新时间:2023-10-30 21:14:47 29 4
gpt4 key购买 nike

我正在为我的应用程序使用 AngularJS 1.6 和 Typescript,我想知道是否有办法用 TypeScript 编写 Service Worker?

当我用谷歌搜索时,我发现了很多用 Angular2 编写它的技巧,但我对 Angular2 没有任何经验。

我之前已经写过 service workers 但它是纯 js,我应该创建一个服务还是考虑到我使用的是 typescript 的事实?我知道纯 Java 脚本可以工作,但我认为这不是一个好方法,因为我主要在应用程序的其余部分使用 typescript 。

我想在类等中重写这样的东西:

var cacheWhiteList = [];
cacheWhiteList.push(cacheName);
cacheWhiteList.push(dataCacheName);

self.addEventListener('install', function(e) {
console.log('[ServiceWorker] Install');
e.waitUntil(
caches.open(cacheName).then(function(cache) {
console.log('[ServiceWorker] Caching app shell');
return cache.addAll(filesToCache.map(url => new Request(url, {
credentials: 'same-origin'
})));
})
);
});

self.addEventListener('activate', function(e) {
console.log('[ServiceWorker] Activate');
e.waitUntil(
caches.keys().then(function(keyList) {
return Promise.all(keyList.map(function(key) {
console.log('[ServiceWorker] Removing old cache', key);
if (cacheWhiteList.indexOf(key) === -1) {
return caches.delete(key);
}
}));
})
);

});

self.addEventListener('push', function(event) {
console.log('Push message received', event);
var notificationBody = "";
event.waitUntil(
fetch('/api/Deploy/LastReleases', {
method: 'get',
credentials: 'same-origin'
}).then(function(response) {
return response.text();
}).then(function(text) {
notificationBody = text;
console.log("body1:" + notificationBody);
var title = 'UDD DELIVERY';
self.registration.showNotification(title, {
body: notificationBody,
icon: '/Content/images/icons/icon-120x120.png',
vibrate: [300, 100, 300],
tag: 'Release-tag',
requireInteraction: true
})
})
);
});

self.addEventListener('notificationclick', function(event) {
event.notification.close();
event.waitUntil(clients.matchAll({
includeUncontrolled: true,
type: 'window'
}).then(activeClients => {
if (activeClients.length > 0) {
activeClients[0].navigate('/');
activeClients[0].focus();
} else {
clients.openWindow('/');
}
}));
});

self.addEventListener('fetch', function(e) {
var dataUrl = '/api/';
var dataUrl2 = '/api/Deploy/LastReleases';
var dataUrl3 = '/api/deploy/Register';
if (e.request.url.indexOf(dataUrl) > 0) {
if (e.request.url.indexOf(dataUrl2) > 0 || e.request.url.indexOf(dataUrl3) > 0) {
e.respondWith(
fetch(e.request)
.then(function(response) {
return response;
})
);
} else {
e.respondWith(
fetch(e.request)
.then(function(response) {
return caches.open(dataCacheName).then(function(cache) {
cache.put(e.request.url, response.clone());
return response;
});
})
);
}
} else {
e.respondWith(
caches.match(e.request).then(function(response) {
return response || fetch(e.request);
})
)
};
});

最佳答案

TypeScript 是 JavaScript 的超集。这意味着所有有效的 JavaScript 代码也是有效的 Type Script 代码。以下是我将JS代码转TS的步骤

  1. 找到合适的类型

    您可以找到服务 worker API 的类型 here

  2. 为所有变量添加正确的类型以避免错误类型冲突。

  3. 向函数添加封装并将其导出为类。

  4. 必要时使用将 TypeScript 转换为 JavaScript 的构建工具 (Webpack)

例如,假设我们有一个 Greeter 模块,它有一个实例变量 greeting 和一个将 hello 附加到 greeting 的方法 greet。该模块的代码如下所示

var Greeter = /** @class */ (function () {
function Greeter(message) {
this.greeting = message;
}
Greeter.prototype.greet = function () {
return "Hello, " + this.greeting;
};
return Greeter;
}());
alert(new Greeter("samuel").greet());

上面js函数在typescript中的对应表示如下

class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}

alert(new Greeter("samuel").greet());

可以找到迁移的官方文档here

关于javascript - AngularJS + typescript : Write a Service Worker in Typescript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47220369/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com