Closed Th2y closed 3 years ago
No ts, o código está assim:
var stores = ['formacoes'];
var version = 2;
var dbName = 'Thayane'
export class ConnectionFactory{
constructor(){
throw new Error("Não é possível criar instâncias de ConnectionFactory!");
}
static getConnection(){
return new Promise((resolve, reject) => {
let openRequest = window.indexedDB.open(dbName, version);
openRequest.onupgradeneeded = e => {
let target: any = e.target;
ConnectionFactory._criarStores(target.result);
};
openRequest.onsuccess = e => {
let target: any = e.target;
resolve(target.result);
};
openRequest.onerror = e => {
let target: any = e.target;
console.log(target.error);
reject(target.error.name);
};
})
}
private static _criarStores(connection: any){
stores.forEach(store => {
if(connection.objectStoreNames.contains(store)){
connection.deleteObjectStore(store);
console.log("Apagando pois já existe...");
}
connection.createObjectStore(store, {autoIncrement: true});
})
}
}
Thay depois coloca o erro que aparece no terminal ou console.
Erro quando uso esse ts:
Uncaught ReferenceError: ConnectionFactory is not defined
at <anonymous>:1:1
Erros quando tento usar o ts da mesma forma que o js:
Property 'result' does not exist on type 'EventTarget'.
Property 'error' does not exist on type 'EventTarget'.
Consegui resolver o problema, para isso, fiz:
var ConnectionFactory = (function(){
//var stores = ['formacoes', 'skills']
var stores = ['formacoes'];
var version = 2;
var dbName = 'Thayane';
var connection:any = null;
return class ConnectionFactory{
constructor(){
throw new Error("Não é possível criar instâncias de ConnectionFactory!");
}
static getConnection(){
return new Promise((resolve, reject) => {
if (!window.indexedDB)
window.alert("Seu navegador não suporta uma versão estável do IndexedDB. Alguns recursos não estarão disponíveis.");
let openRequest = window.indexedDB.open(dbName, version);
openRequest.onupgradeneeded = e => {
let target: any = e.target;
ConnectionFactory._criarStores(target.result);
};
openRequest.onsuccess = e => {
let target: any = e.target;
if(!connection)
connection = target.result;
resolve(connection);
};
openRequest.onerror = e => {
let target: any = e.target;
alert("Não usa IndexedDB?!");
console.log(target.error);
reject(target.error.name);
};
})
}
private static _criarStores(connection: any){
stores.forEach(store => {
if(connection.objectStoreNames.contains(store)){
connection.deleteObjectStore(store);
console.log("Apagando pois já existe...");
}
connection.createObjectStore(store, {autoIncrement: true});
})
}
}
})();
Em js, o código seria esse:
Porém, em ts ele diz que as propriedades "result" e "error" não existem no tipo EventTarget (do "e.target"), tentei contornar utilizando o
let target: any = e.target;
, substituindo os locais onde tem "e.target" por "target" porém apenas deixa de dar erro no VSCode e quando compila, passa a dar erro no console