如何在没有模块的情况下在 vue 中使用 TypeScript

2024-05-25

In package.json I have

"devDependencies": {    
   "vue": "2.5.16"
}

这给了我index.d.ts, vue.d.ts and so on https://github.com/vuejs/vue/tree/v2.5.16/types in node_modules\vue\types。一开始我遇到了找不到vue的问题((TS) Cannot find name 'Vue')当做类似的事情时new Vue({...});。看完之后this https://forum.vuejs.org/t/typescript-is-there-a-type-definition-for-vue2-and-how-to-use-it/1741线程我通过添加来修复它custom.d.ts file:

import _vue = require('vue');

declare global {
    const Vue: typeof _vue;
}

并引用它/// <reference path="../Declarations/custom.d.ts" />

显然原因是 vue 的声明是外部模块格式(使用export),如果不使用模块系统,则需要全局模块。

但现在 IntelliSense 给了我:"(TS) Cannot use 'new' with an expression whose type lacks a call or construct signature."并且构建失败。

我正在使用 TypeScript 2.8outFile并且没有模块(只是referencexml 注释)。

编辑:我想我通过使用找到了答案

const Vue: typeof _vue.default;

这使得错误为new Vue()声明消失。但是当我尝试声明一个类型的变量时Vue我得到了Cannot find name 'Vue'再次出错:

var app = new Vue({}); // Works
var app2:Vue = new Vue({}); // Doesn't work

我得到了运行的基础知识,里面有以下内容custom.d.ts:

import * as _vueIndex from "vue";
import * as _vue from "vue/types/vue";

declare global {
    const Vue: _vueIndex.VueConstructor; // related to vue.d.ts "export const Vue: VueConstructor;"

    namespace Vue {
        //type Vue = typeof _vueIndex.default; // For some reason this becomes VueConstructor interface instead of Vue interface
        type Vue = _vue.Vue;
        type CreateElement = _vueIndex.CreateElement;
        type CombinedVueInstance<Instance extends Vue, Data, Methods, Computed, Props> = _vue.CombinedVueInstance<Instance, Data, Methods, Computed, Props>;
        /*Other interfaces*/
    }
}

现在可以做类似的事情:

var app: Vue.CombinedVueInstance<Vue.Vue, any, VmMethods, any, any> = new Vue({
    el: '#app',
    methods: new VmMethods()
});

console.log(app.toggleSidebar()); // toggleSidebar is a public function in VmMethods
console.log(app.nonExisting()); // ReSharper gives correct cannot resolve error but TypeScript still transpiles for some reason, which gives a run time error

ReSharper 仍然给出Symbol Vue cannot be properly resolved, probably it is located in inaccessible module但 TypeScript 可以转换并运行良好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在没有模块的情况下在 vue 中使用 TypeScript 的相关文章

随机推荐

  • 从 Brixton.RC1 开始的 ZuulProxy 未传递授权标头

    从 Spring Cloud 切换时Brixton M5 to Brixton RC1我的 ZuulProxy 不再通过Authorization标头下游到我的代理服务 我的设置中有各种各样的角色 但大多数都相当简单 Authorizati
  • HttpRequest 和 XMLHttpRequest 之间的真正区别

    阅读前注意事项 这不是重复的xmlhttprequest 和 httprequest 之间的区别是什么 https stackoverflow com questions 8499062 what are differences betwe
  • 我的 Opencv 应用程序处理速度非常慢

    我正在构建一个 OpenCV 应用程序 它从相机捕获视频 并在删除背景后将其覆盖在另一个视频上 我无法达到合理的速度 因为它以大约 1 fps 的速度播放输出 而我的背景去除以 3 fps 的速度工作 有没有办法以正常速度显示背景视频并以
  • QPainterPath::arcTo 上的角度如何解释?

    我正在开发图形编辑器的功能 在其中编辑弧线 当形状是椭圆形时 QPainterPath arcTo 的行为并不像我预期的那样 当它是一个圆圈时 它会按预期工作 下面的两张图片显示了结果 在第一种情况下 我创建了一个圆 然后将其转换为初始起始
  • 如何在 UIButton 中创建边框?

    我在名为 addButton 的应用程序中使用自定义按钮 我想用白色边框它 如何在自定义按钮周围获得白色边框 您可以通过访问按钮的图层属性来设置 CALayer 上的边框属性 首先 添加石英 import
  • 如何转换WPF项目以便它可以被单独的exe用作类库

    有没有人尝试过或觉得需要在独立的 exe 中启动应用程序并将 WPF 用作另一个 DLL 而不是在其中包含 Main 方法 我看到的优点是逻辑分离 并且能够在 WPF 代码之外设置工厂等 从而减少程序集依赖性 我已经尝试过这样做并且可以做到
  • 将 < 转换为 < xml 文档

    我已读取 XML 文件并转换为 NSXMLDocument 对象 但是 由于节点的字符串内容中存在 我如何将文件作为普通 XML 文件写入 其中 lt 将被 感谢致敬 列宁 当 的时候 lt 字符出现在文本节点中 它将被序列化为 lt 当您
  • 如何组织课程、课程包[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 您如何决定包名称应该是什么以及什么类应该放入哪个包中 我正在开发一个项目 在该项目中 我不断添加 删除类 并且不确定我是否需要一个新包 或者应该将其添
  • 如何从 JavaScript 中的 URL 中提取主机?

    捕获域直到结束字符 我需要一个捕获的正则表达式example com在所有这些中 example com 3000 example com pass gas example com example com 如果您确实有有效的 URL 那么这
  • java.io.IOException:Android Firebase 中的 FIS_AUTH_ERROR 但调试模式正常

    我在检索 firebase 令牌时遇到以下问题 FirebaseMessaging getInstance getToken 在调试模式下 我获取令牌并将其发送到服务器 在运行模式下 应用程序工作正常 它已发布 但我无法获取令牌 因为我已经
  • 防止表单重新提交

    第一页包含一个 HTML 表单 第二页 处理提交的数据的代码 第一页中的表格已提交 浏览器被重定向到第二页 第二页处理提交的数据 此时 如果刷新第二页 则会弹出 确认表单重新提交 警报 这可以预防吗 人们过去常采取两种方法 方法一 使用 A
  • 如何在 xslt 2.0 中获取与此场景相关的特定 XML 元素索引?

    我想使用 XSLT2 0 将一个 xml 转换为另一个 xml 在这样做时 我想找到一些与我在此处解释的场景相关的 XML 元素索引 这是 XML 文档
  • C# 的 xml 序列化中是否有一个属性可以跳过空数组?

    C 的 xml 序列化中是否有一个属性可以跳过空数组 这将提高 xml 输出的可读性 好吧 你也许可以添加一个ShouldSerializeFoo method using System using System ComponentMode
  • 如何在 Mac 操作系统中播放声音?

    我想在专为 Mac OS X Lion 10 7 而不是 iPhone 设计的 Objective C 应用程序中播放 mp3 文件 谢谢 看看NSSound http developer apple com library mac doc
  • 使用 LINQ 的 Silverlight 客户端数据库

    我正在创建一个浏览器外 silverlight 应用程序 并希望在客户端有一个数据库 我看过 sqlite 但似乎它不适用于 silverlight 如果我能使用 LINQ 那就太好了 我更喜欢免费的解决方案 但付费始终是一种选择 有什么建
  • 我仍然认为在客户端哈希密码更好。我错了吗?

    我读过这些 https hackernoon com im harvesting credit card numbers and passwords from your site here s how 9a8cb347c5b5 https
  • 获取数据APDU命令不同的标签和响应格式

    你可能知道 全球平台卡规格 http globalplatform org specificationscard asp定义了一个名为Get Data从智能卡检索一些信息 全球平台专业版 https github com martinpal
  • R 语言与 php 集成以获取 R 的结果

    我有以下 R 脚本 assign data path data path lt C Users Owner Desktop R work assign valus to the following three percent train p
  • 无法放置双重 SharedPreferences

    出现错误 这种类型的共享首选项编辑器的 put double 方法未定义 Eclipse 提供了一种快速修复方法 将强制类型转换添加到编辑器 但是当我这样做时 它仍然给出错误 为什么我不能 put double 代码 Override pr
  • 如何在没有模块的情况下在 vue 中使用 TypeScript

    In package json I have devDependencies vue 2 5 16 这给了我index d ts vue d ts and so on https github com vuejs vue tree v2 5