Javascript 为什么typescript传输时对象属性不存在,但它在运行时存在?
Typescript无法传输我的代码,因为它认为objects方法不存在 在运行时,当承诺已解决时,该方法确实存在。它只是在typescript尝试传输时不存在,因为承诺已返回 返回解析oauthclient的承诺的My函数:Javascript 为什么typescript传输时对象属性不存在,但它在运行时存在?,javascript,typescript,Javascript,Typescript,Typescript无法传输我的代码,因为它认为objects方法不存在 在运行时,当承诺已解决时,该方法确实存在。它只是在typescript尝试传输时不存在,因为承诺已返回 返回解析oauthclient的承诺的My函数: public generateOauthClient(){ return new Promise((resolve, reject) => { // Load client secrets from a local file
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)
})
});
然后我得到了typescript错误:属性“setCredentials”在类型“{}”上不存在。
如果我将generateOauthClient
函数更改为返回回调,而不是返回承诺,那么typescript可以正常传输
我如何避免这种情况,以便使用承诺而不是回调?您需要告诉Typescript您的
承诺将返回什么。这将允许Typescript以您使用的语法(async/await或.then)检查您对结果所做的操作:
新承诺((解决、拒绝)=>{..})
如果我使用.then()
promise语法而不是async/await
,它似乎不起作用。我得到了相同的错误关于财产不存在,这是我所缺少的。谢谢你。尽管如此,我还是返回了一个googleAuth
的实例,因此需要执行此操作:newpromise((resolve,reject)=>{..})
,这稍微有些不同。
new Promise<auth.OAuth2>((resolve, reject) => { .. } )