如何在javascript文件的typescript中编写定义文件?

时间:2016-07-20 05:18:24

标签: typescript aurelia

我的最终目标是在aurelia项目中为materialize-css执行一些初始化代码。 I have a related question on this matter,但它从未解决过。问题如下:我使用的是typescript,到目前为止还无法执行以下函数:

$('slider').slider;

所以我决定将这些文件放在一个javascript文件中(它在index.html中查看import中的materialize指令)并在顶部放置一个定义文件。当我尝试编写声明文件时,我按照typescriptlang.org提供的说明编写了这个:

module initializers {
  function setUpHome(): void;
}

declare module "initializers" {
    export = initializers;
}

但是我收到以下错误:

A 'declare' modifier is required for a top level declaration in a .d.ts file

我愿意接受任何指导。

编辑:功能setUpHome

function setUpHome() {
  console.log("hello");
    $('.slider').slider();
    $('select').material_select();
    $('.button-collapse').sideNav();

    var slider = document.getElementById('wordCountSlider');
    noUiSlider.create(slider, {
      start: [0, 6000],
      connect: true,
      step: 50,
      range: {
        'min': 0,
        'max': 6000
      },
      format: wNumb({
        decimals: 0
      })
    });

    slider = document.getElementById('timeRangeSlider');
    noUiSlider.create(slider, {
      start: [0, 5],
      connect: true,
      step: 1,
      range: {
        'min': 0,
        'max': 5
      },
      format: wNumb({
        decimals: 0
      })
    });
    setUpTagSearchFilter();
};

function setUpTagSearchFilter() {
  var cities = new Bloodhound({
    datumTokenizer: Bloodhound.tokenizers.obj.whitespace('text'),
    queryTokenizer: Bloodhound.tokenizers.whitespace,
    prefetch: 'assets/cities.json'
  });
  cities.initialize();

  var tagfilter = $('#tag-filter');
  tagfilter.materialtags({
    itemValue: 'value',
    itemText: 'text',
    typeaheadjs: {
      name: 'cities',
      displayKey: 'text',
      source: cities.ttAdapter()
    }
  });
  tagfilter.materialtags('add', { "value": 1 , "text": "Amsterdam" , "continent": "Europe" });
  tagfilter.materialtags('add', { "value": 4 , "text": "Washington" , "continent": "America" });
  tagfilter.materialtags('add', { "value": 7 , "text": "Sydney" , "continent": "Australia" });
}

2 个答案:

答案 0 :(得分:2)

错误只是说您需要先声明一个模块,然后才能使用它。您可以一步完成这两项工作:

declare module initializers {
    export function setUpHome(): void;
}

如果您使用的是ECMAScript 5,那也是个好主意to turn strict mode on。此外,请记住,自TypeScript 1.5以来内部模块是命名空间,然后将其声明为命名空间是个好主意。来自TypeScript doc的报价:

  

关于术语的说明:在TypeScript中注意这一点非常重要   1.5,命名法已经改变。 “内部模块”现在是“命名空间”。 “外部模块”现在只是“模块”。

总结一下,我会这样做:

declare namescpace initializers {
   'use strict';

    export function setUpHome(): void;
}

答案 1 :(得分:2)

  

我的最终目标是执行一些初始化代码   aurelia项目中的materialize-css。我有一个相关的问题   在这件事上,但它从未解决过。问题如下:   我正在使用打字稿,到目前为止还无法执行   功能如:

     

$('滑块&#39)。滑块

实际上,打字稿没有理由阻止你这样做。难以理解您遇到的问题,因为"无法执行"需要更多信息(如错误信息)进行诊断。

我的猜测是你的意思是VSCode / Visual Studio正在给你" red squigglies。"如果是这种情况,这只意味着没有安装打字机。如果您熟悉typings cli,那么您只需要安装实体化类型:

\1

修改

在评论中,您突出显示了一条新的错误消息,实际上代表了一个完全不同的问题。

  

错误TS2339:属性'滑块'类型' ElementFinder上不存在。

这意味着代码中的typings install dt~materialize-css --global --save是Protractor,而不是jQuery。您需要确保在非测试代码中排除对量角器d.ts的任何引用。我不确定你的量角器类型在哪里,所以你必须搜索它们。如果它们是通过打字安装的:

$