有了这个功能,我需要创建它的一个新实例。在 JavaScript 中一切正常,但如何将其转换为 TypeScript?
function Calendar(selector, events) {
this.el = document.querySelector(selector);
this.events = events;
this.current = moment().date(1);
this.draw();
var current = document.querySelector('.today');
if(current) {
var self = this;
window.setTimeout(function() {
self.openDay(current);
}, 500);
}
}
var calendar = new Calendar('#calendar', data);
var calendar = new Calendar('#calendar', data);
确实,任何在 JavaScript 中工作的东西都可以在 TypeScript 中工作,但这只是意味着 TypeScript 编译器或多或少会原封不动地输出你的 JavaScript,可能会在途中吐出一堆警告。如果您只是忽略错误,事情仍然会奏效。
但是假设您想利用 TypeScript 的强大功能,您应该开始改变事情。开始吧。
首先,您应该在您的项目中安装来自 Moment.js的类型,可能是npm install moment
从您的项目文件夹中运行。
然后,我通常喜欢打开所有--strictXXX
编译器标志(我认为您可以只使用--strict
)来获得最大数量的警告以忽略和/或修复。
好的,现在:可构造事物的 ES6/TypeScript 习惯用法是使用class
. 下面是我所做的一些修改,以及一些内联注释:
import * as moment from 'moment';
class Calendar {
// a Calendar has an el property which is a possibly null DOM element:
el: Element | null;
// a Calendar has a current property which is a Moment:
current: moment.Moment;
// a Calendar has an events property which is an array of Event:
events: Event[];
// the constructor function is what gets called when you do new Calendar()
// note that I assume selector is a string and events is an array of Event
constructor(selector: string, events: Event[]) {
this.el = document.querySelector(selector);
this.events = events;
this.current = moment().date(1);
this.draw();
var current = document.querySelector('.today');
if (current) {
var self = this;
window.setTimeout(function() {
self.openDay(current);
}, 500);
}
}
draw() {
// needs an implementation
}
openDay(day: Element | null) {
// needs an implementation
}
}
declare let data: Event[]; // need to define data
var calendar = new Calendar('#calendar', data);
您需要实现draw()
和openDay()
它们可能的部分方法Calendar.prototype
。我把存根放在那里。您还需要定义data
,它是(我猜)一个事件数组(如果是其他事情,您需要更改events
.
如果您查看上面编译的 JavaScript 输出,您会发现它或多或少与您所拥有的相同。但是现在,当然,TypeScript 很高兴让您调用new Calendar(...)
.
当然,您还可以进行更多更改。例如,您可以使用参数属性并删除该this.events = events;
行。或者,您可以使用属性初始值设定项并将其this.current = ...
移出constructor
函数并移入属性声明中。等等。
但这应该足以让你开始。祝你好运!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句