gpt4 book ai didi

javascript - 为什么 typescript 转换时对象属性不存在,但在运行时却存在?

转载 作者:行者123 更新时间:2023-12-03 03:11:32 25 4
gpt4 key购买 nike

Typescript 无法转换我的代码,因为它认为对象方法不存在。

在运行时,当 Promise 解决时,该方法确实存在。它只是在 typescript 尝试转换时不存在,因为返回了 Promise。

我的函数返回解析 oauthclient 的 promise :

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 函数更改为返回回调而不是返回 promise ,则 typescript 可以正常转换。

如何解决这个问题,以便我可以使用 Promise 而不是回调?

最佳答案

您需要告诉 Typescript 您的 Promise 将返回什么。这将允许 Typescript 检查您使用的语法(async/await 或 .then)对结果执行的操作:

 new Promise<auth.OAuth2>((resolve, reject) => { .. } )

关于javascript - 为什么 typescript 转换时对象属性不存在,但在运行时却存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46930450/

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