Dialogflow es Google DialogFlow上的类型{}操作上不存在Conv.user.storage属性
我已经为Google Home做了一段时间的集成工作,但由于某些原因,我无法获取用户。conv.storage.someProperty=“something”`工作 我得到的错误是:类型“{}”上不存在属性“authtoken”。 然而。。。这正是他们的示例,您可以通过在线查看文档或在他们自己的导入包代码中获得 这是他们的代码,我想这是有效的Dialogflow es Google DialogFlow上的类型{}操作上不存在Conv.user.storage属性,dialogflow-es,actions-on-google,Dialogflow Es,Actions On Google,我已经为Google Home做了一段时间的集成工作,但由于某些原因,我无法获取用户。conv.storage.someProperty=“something”`工作 我得到的错误是:类型“{}”上不存在属性“authtoken”。 然而。。。这正是他们的示例,您可以通过在线查看文档或在他们自己的导入包代码中获得 这是他们的代码,我想这是有效的 // Dialogflow app.intent('Default Welcome Intent', conv => { conv.user.
// Dialogflow
app.intent('Default Welcome Intent', conv => {
conv.user.storage.someProperty = 'someValue'
})`
这是我的全部代码,来自一个目的:
app.intent("Default Welcome Intent", async (conv) => {
const login = await login();
if (login) {
conv.user.storage.authToken = login.authToken;
conv.ask(`hi ${conv.user.storage.authToken}`);
} else {
conv.close(`something went wrong`);
}
});
注意:代码非常简单,只包含重要的内容。这不是我真正的应用程序。我刚刚找到了答案!正如我在问题中所说,错误在于
user.conv.storage.someProperty=“something”代码>
出于某种原因,TypeScript不允许我做这个约定,所以我选择了老式的工作方式:
user.conv.storage[“someProperty”]=“something”代码>
这就成功了!为了获取该值,我再次调用user.conv.storage[“someProperty”]
如果有人知道我为什么会犯这个错误,并且愿意解释,请解释!我花了几个小时试图让存储正常工作…问题的一部分是,示例是为JavaScript而不是为TypeScript编写的,TS中严格的类型检查导致了这个问题
正如您所发现的,通过索引而不是属性来引用它可以满足您的需要。这是一个有效的解决方法,尽管有点粗糙
然而,潜在的问题是,当他们导出对话框flowconversation
时,TUserStorage
类型被定义为没有特定属性的对象。从(至少从我写这篇文章时起):
虽然我对TypeScript的经验不足,不知道这是否真的是一个好的解决方案,但您可能需要一个GenericStorage对象:
interface GenericStorage {
[propName: string]: any;
}
const app = dialogflow<GenericStorage, GenericStorage>();
接口通用存储{
[propName:string]:任意;
}
const-app=dialogflow();
我反对图书馆建议在默认情况下做这种事情。你不一定要做吗?@stuartd-不一定。大多数国家可能要求PII或个人信息(例如,您的姓名)使用它,但不要求其他信息(如果有无法与您明确关联的ID)。如果您不确定这是PII还是个人信息,请咨询律师。@DuncanT-login.authToken的值是多少?
我猜login.authToken不存在,因为login未定义。@这是作为字符串的散列!另外,我在这个例子中没有提到同意确认。我也会为将来建造这个,但因为这是我正在建造的原型,所以我现在不需要它。谢谢你的解释!我认为这与我使用打字脚本有关,所以我有点正确。无论如何,谢谢你打开了针对库的bug!你对VSCode的评论让我明白了打字脚本的方向。谢谢你的指导!
interface LoginStorage {
authToken?: string
}
const app = dialogflow<{}, LoginStorage>();
interface GenericStorage {
[propName: string]: any;
}
const app = dialogflow<GenericStorage, GenericStorage>();