如何粗略导入.js库而没有打字稿中的类型声明?

时间:2018-05-20 21:14:33

标签: javascript typescript import

我正在使用带有cli的Vue.js并在Typescript上启动项目。除了必须使用js库的情况外,我没有任何问题。我知道这个https://github.com/DefinitelyTyped/DefinitelyTyped,我尽可能地使用它。但是当js库是新的,旧的或不受欢迎的并且没有类型定义时,存在一个大问题。我花了很多时间寻找解决方案,似乎只有很少的选择:

在我的情况下,第一个选项不可用。第二 - 非常依赖于库,它可能有难以声明的结构。 那么,如果我想要导入js库,我能做什么呢? 我试过这些方法:

import { } from 'velocity-animate';
import Velocity from 'velocity-animate';
import { Velocity } from 'velocity-animate';
import Velocity from '../../node_modules/velocity-animate';
import * as Velocity from 'velocity-animate';
const Velocity = require('velocity-animate');
const Velocity: any = require('velocity-animate');
const Velocity = require('../../node_modules/velocity-animate/velocity.js');

另外,尝试使用上面的导入添加不同的变体和组合,如:

declare var Velocity: any;
declare module 'velocity-animate';

等。没有,我只是在控制台中有错误:

  

未捕获的ReferenceError:未定义速度

这不是我在代码中的拼写错误,在常规js中相同的代码工作正常,即 https://codepen.io/anon/pen/YLBZMd

另一个我的怀疑是tscompiler和他的规则/设置。这是我的:

{
  "compilerOptions": {
    "target": "es2015",
    "module": "es2015",
    "strict": true,
    "allowJs": true,
    "jsx": "preserve",
    "moduleResolution": "node",
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "allowSyntheticDefaultImports": true,
    "sourceMap": true,
    "baseUrl": ".",
    "noImplicitAny": false,
    "types": [
      "node",
      "googlemaps"
    ],
    "paths": {
      "@/*": [
        "src/*"
      ]
    }
  },
  "include": [
    "src/**/*.ts",
    "src/**/*.vue",
    "tests/**/*.ts"
  ],
  "exclude": [
    "node_modules"
  ]
}

有人可以解释一下我做错了什么吗?为什么如此简单的事情会导致如此大的问题?

1 个答案:

答案 0 :(得分:0)

  

未捕获的ReferenceError:未定义速度

这是运行时错误,而不是编译时打字稿错误

修复

确保script全球可用。例如在运行应用程序代码之前,将https://raw.githubusercontent.com/julianshapiro/velocity/master/velocity.min.js添加为=IF(Sheet7!$K2=TRUE,QUERY(Sheet7!$P2:$X2), IF(Sheet7!$L2=TRUE,QUERY(Sheet7!$Z2:$AH2), IF(Sheet7!$M2=TRUE,QUERY(Sheet7!$AJ2:$AR2), IF(Sheet7!$N2=TRUE, QUERY(Sheet7!$AT2:$BB2), "ERROR")))) 标记