我正在使用indexeddb和typescript。我的问题是TS似乎无法处理event.target.result
属性。一个很好的例子:
request.onsuccess = (event) => {
namespace.db = event.target.result; //the property 'results' does not
//exist on the value of type 'EventTarget'
var a = event.target;
var b = <IDBOpenDBRequest>a;
var c = b.result; // <-- magically there's a results property here
version = parseInt(namespace.db.version);
console.log("version: " + version);
deferred.resolve();
}
所以我的问题是:是否有更简单的方法将target
属性转换为<IDBOpenDBRequest>
,而不是上面的a
,b
方法?
答案 0 :(得分:11)
如果您正在寻找oneliner,可以通过添加一些额外的括号来强制转换它:
indexedDB.open("test", 1).onsuccess = (ev) => {
var result: IDBDatabase = (<IDBOpenDBRequest>ev.target).result;
}
另请注意: IDBDatabase
,因为在Typescript定义文件中将结果输入为any
。它不是必需的,而是用它作为一个&#34;任何&#34;类型意味着编译器不会进行类型检查。
现在,您可以使用此处定义的可用方法使用您想要的结果:http://www.w3.org/TR/IndexedDB/#database-interface
答案 1 :(得分:0)
您还可以像这样使用'as'关键字进行投射
interface MyCustomUserInterface {
_id: string;
name: string;
}
const userID = (req.user as MyCustomUserInterface)._id
...
干杯!