Angular 13 中无法从 Typescript 调用 JS 函数

Unable to call a JS function from Typescript in Angular 13

我正在尝试从我的一个组件调用以下函数 LoadMultiSelect(),因为我使用的是非 Angular 库:

https://ibnujakaria.github.io/multiple-select-js/

这在控制台中完美运行:

new MultipleSelect('#select-multiple-language', {
  placeholder: 'Select Language'
})

并加载 JS 组件。

稍后,我尝试将其添加到 Angular,但我找不到如何添加。

我试过两种方式导出JS函数:

export default function LoadMultiSelect() {
  new MultipleSelect('#select-multiple-language', {
    placeholder: 'Select Language'
  });
}

像这样:

LoadMultiSelect() {
  new MultipleSelect('#select-multiple-language', {
    placeholder: 'Select Language'
  });
}

var multiselect = new LoadMultiSelect();

export { multiselect };

我创建了一个文件来加载导出的函数:

assets/js/multiselect.js

后来,我在 angular.jsonscripts 部分的 build 中添加了它,如下所示:

"scripts": [
              "./node_modules/multiple-select-js/dist/js/multiple-select.js",
              "src/assets/js/multiselect.js"
            ]

然后我尝试将它添加到我的组件中,如下所示:

import LoadMultiSelect from '../../../../../assets/js/multiselect';

import LoadMultiSelect from 'src/assets/js/multiselect';

但是没有任何效果,我得到这个错误:

Could not find a declaration file for module '../../../../../assets/js/multiselect'. '/Users/fanmixco/Documents/GitHub/holma-bootstrap/src/assets/js/multiselect.js' implicitly has an 'any' type.

或者其他人,知道我做错了什么吗?

P.S.:

  1. 此外,我尝试使用require,但也失败了。

  2. 我已经用旧版本 Angular 测试了以前的解决方案:

我刚刚在我的本地系统中尝试了这个,有一些如下所示的随机文件,

export function MultipleSelect(val1, val2){
    console.log('Be awesome always', val1, ' and ', val2);
}

现在我像这样在我的组件中导入它,

export class AppComponent {
    title = 'Whosebug-examples';
    declare MultipleSelect: any;

    constructor(
      private fb: FormBuilder
    ) {
    }

    ngOnInit() {
      import('./someRandomFile').then(randomFile=>{
        randomFile.MultipleSelect('one', 'two')
      });
    }
}

为了将此文件导入到 angular ts 文件中,我必须允许它在 tsconfig.json 中允许 js 导入,如下所示,

"allowJs": true

在下面的控制台中查看结果,

注意:如果无法从 node_modules 加载文件,请将其放在 asset 等常规文件夹中,然后按照建议进行导入