typescript 为什么我需要在我的.d.ts文件中导入Vue?

8yoxcaq7  于 2023-01-31  发布在  TypeScript
关注(0)|答案(1)|浏览(221)

我不明白为什么我需要在我的.d.ts文件中导入Vue?我在官方网站上找到“在声明增强类型之前确保导入'vue'”。但是为什么需要这样做呢?https://v2.vuejs.org/v2/guide/typescript.html#Augmenting-Types-for-Use-with-Plugins
有时候,我没有在我的. d.ts文件中导入Vue,但是没有报告错误。我浏览了许多文章,但是没有找到答案

xzv2uavs

xzv2uavs1#

vue希望您做的是将类和接口合并在一起。在某种程度上,这就像用自己的属性扩展Vue类一样。
下面是一个简单的例子:

class Car {
  wheels: number;
}

interface Car {
  doors: number;
}

现在,当您示例化这个Car对象时,您可以看到它将同时具有doorswheels属性。

const car = new Car();
car.wheels = 4; // no type error
car.doors = 2; // no type error

所有这些都很好,直到你尝试做一些更复杂的事情,比如给Car接口添加一个方法,然后你会得到一个错误,因为接口不能保存实现,只能保存结构。
正如您所链接的文章提到的,为了解决这个问题,typescript增加了类型。
通过导入Car类,然后声明一个同名的模块,可以将两个objects合并在一起:

import Car from "./car";

declare module "./car" {
  // Now add the interface
  interface Car {
    doors: number;
    drive(distance: number): number;
  }
}

现在,这不允许您将实现添加到接口中,但它所做的是公开对象 prototype,您现在可以在其中添加实现细节,而之前无法添加。

Car.prototype.drive = function(distance) {
  // move `distance` spaces and return new location
}

当您省略import语句时没有看到错误的原因是,对于TypeScript,您已经为它提供了一个模块Vue,并且在您尝试访问import将为您提供的内容之前没有错误。

相关问题