Typescript无法转换我的代码,因为它认为对象方法不存在。
在运行时,当promise已解决时,该方法确实存在。它只是在打字稿试图转换时不存在,因为Promise被返回。
我的函数返回解析oauthclient的承诺:
public generateOauthClient(){
return new Promise((resolve, reject) => {
// Load client secrets from a local file.
fs.readFile(appConfig.youtube.keyFilename, 'utf8', function processClientSecrets(err, content) {
if(err) {
return reject('Error loading client secret file: ' + err);
}
const credentials = JSON.parse(content);
const clientSecret = credentials.installed.client_secret;
const clientId = credentials.installed.client_id;
const redirectUrl = credentials.installed.redirect_uris[0];
const auth = new googleAuth();
const oauth2Client = new auth.OAuth2(clientId, clientSecret, redirectUrl);
resolve(oauth2Client);
})
});
}
然后我尝试在我的代码中的其他地方调用
const oauth2Client = await this.generateOauthClient();
oauth2Client.setCredentials({
access_token: JSON.parse(tokens).access_token,
refresh_token: JSON.parse(tokens).refresh_token
});
oauth2Client.refreshAccessToken((err, tokens) => {
if(err) return reject(err)
this.storeToken(tokens).then(()=>{
resolve('Successfully updated tokens')
}).catch((err2)=> {
reject(err2)
})
});
然后我收到打字稿错误:Property 'setCredentials' does not exist on type '{}'
如果我改变我的generateOauthClient
函数以返回回调而不是返回一个promise,那么typescript就可以了。
我如何解决这个问题,以便使用promises而不是回调?
答案 0 :(得分:1)
你需要告诉Typescript你的var startTime = Date.now();
setTimeout(function(){
var elapsedTime = Date.now() - startTime;
// Additional code to calculate hour, minute, second, milisecond here
}, 10);
会返回什么。这将允许Typescript使用您使用的语法(async / await或.then)检查您对结果的处理方式:
Promise