库插件的打字稿声明文件

时间:2020-10-06 16:29:17

标签: typescript leaflet definitelytyped type-declaration .d.ts

我为leaflet-arrowheads写了一个插件leaflet,它扩展了传单的Polyline类。我有一个创建打字稿声明文件的请求。我正在尝试根据instructions from the typescript docs来解决问题,但是我不确定自己是否做对了。我的项目目录如下:

project
-node_modules
-src
 | -index.js
 | -leaflet-arrowheads.js
package.json

我的理解是,我想在我的模块所在的index.d.ts文件夹中粘贴一个src磁贴。因此,我将这样做:

project
-node_modules
-src
 | -index.js
 | -index.d.ts
 | -leaflet-arrowheads.js
package.json

问题1:这是正确的方法吗?还是应该将此文件添加到“ leaflet-arrowheads / index.d.ts”下的DefinitelyTyped / types文件夹中,并指示人们使用npm i @types/leaflet-arrowheads

@types.leaflet开始,传单有自己的打字稿标记。 (您可以看到代码here),它定义了折线上可用的方法类型。我只是想补充一下,因为我的插件只是向L.Polyline添加了一些方法。 Polyline类型定义如下:

export class Polyline<T extends geojson.GeometryObject = geojson.LineString | geojson.MultiLineString, P = any> extends Path {
    constructor(latlngs: LatLngExpression[] | LatLngExpression[][], options?: PolylineOptions);
    toGeoJSON(): geojson.Feature<T, P>;
    getLatLngs(): LatLng[] | LatLng[][] | LatLng[][][];

    // ... a few more method and options definitions
}

问题2:如何向此定义添加一些方法?到目前为止,我的index.d.ts文件中有此文件:

export interface ArrowheadOptions {
   yawn?: number;
   size?: string | number;
   frequency?: string | number;
   proportionalToTotal?: false;
}

export interface Polyline {
   arrowheads: (options?: ArrowheadOptions) => any;
   buildVectorHats: () => any;
   getArrowheads: () => any;
   deleteArrowheads: () => any;
}

我的理解是,这只会将这些选项合并到现有的Polyline类型定义中。那是对的吗?我要走吗?我看到了其他使用如下语法的插件:

import * as L from 'leaflet'

declare module leaflet {

  // export interfaces here

}

其他人再次使用这种语法:

import { Control } from 'leaflet'

declare module 'leaflet {
  namespace Control {
    interface ControlOptions{
      // some definitions here
    }
  }
} 

如果这是一个简单的问题,请原谅我,对于这样的特定情况,我发现打字稿文档有些混乱。我想确保自己编写正确,以便我的定义适合Leaflet及其L.Polyline的现有命名空间。问题3:我在index.d.ts文件中执行操作的方式与此处的其他2个示例之间有什么区别?感谢您的阅读。

0 个答案:

没有答案