Dialogflow es Google DialogFlow上的类型{}操作上不存在Conv.user.storage属性

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.

我已经为Google Home做了一段时间的集成工作,但由于某些原因,我无法获取用户。conv.storage.someProperty=“something”`工作

我得到的错误是:类型“{}”上不存在属性“authtoken”。

然而。。。这正是他们的示例,您可以通过在线查看文档或在他们自己的导入包代码中获得

这是他们的代码,我想这是有效的

// 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>();