我通过显式设置属性来为我的对象设置全局命名空间window.
window.MyNamespace = window.MyNamespace || {};
Run Code Online (Sandbox Code Playgroud)
TypeScript强调MyNamespace并抱怨:
属性'MyNamespace'在'window'类型的值上不存在任何"
我可以通过声明MyNamespace为环境变量并删除window显式来使代码工作,但我不想这样做.
declare var MyNamespace: any;
MyNamespace = MyNamespace || {};
Run Code Online (Sandbox Code Playgroud)
我怎样才能window留在那里让TypeScript开心?
作为旁注,我发现TypeScript抱怨特别有趣,因为它告诉我这种window类型any绝对可以包含任何东西.
我正在创建一个 Sapper 页面,我想在其中使用Google Sign-in button。它需要data-onsuccess属性来指定回调函数。根据我从 Google 的平台 JS 库中发现的内容,它在 global/window范围内查找函数。
有没有办法从全局网页范围访问/调用 Svelte 的组件功能?它可能用于与无法直接加载import到组件中的外部库的互操作。
我正在尝试做的示例:
<script>
function onSignComponent(user){
console.log('Signed in');
}
</script>
<div id="login" class="g-signin2" data-onsuccess="{onSignComponent}" data-theme="dark" />
Run Code Online (Sandbox Code Playgroud)
这项工作onSignComponent在全局范围内时有效,但在组件范围内时无效。
<script src="https://accounts.google.com/gsi/client"></script>\n...\ndeclare var google: any;\n...\n\n useEffect(() => {\n const handleCredentialResponse = (response: any) => {\n console.log(response);\n };\n const client_id = process.env.REACT_APP_GOOGLE_CLIENT_ID;\n const callback = handleCredentialResponse;\n const auto_select = true;\n google.accounts.id.initialize({ client_id, callback, auto_select });\n google.accounts.id.prompt((notification: any) => {\n console.log(notification);\n });\n }, []);\nRun Code Online (Sandbox Code Playgroud)\n\n为什么handleCredentialResponse根本不被调用?系统会提示用户登录,他们点击继续,然后该函数永远不会被调用!咕噜!以上摘自此处和此处的文档
注销notification
nl\xc2\xa0{g: "display", h: true}\nnl\xc2\xa0{g: "skipped", l: "issuing_failed"}\nRun Code Online (Sandbox Code Playgroud)\n