我们独一可以肯定的是该函数有两个参数。我们可以猜出这些类型。也许第一个是一个字符串,第二个是一个设备对象。但这仅仅是猜测,我们可能会错。我们不知道什么选项进入设置对象(他们的名字和类型),或者这个函数返回什么。
我们没有办法在不查看源码或者文档的情况下调用此函数。检查源代码不是一个好的选择 - 功能和类的要点是可以或许在不知道它们若何实现的情况下应用它们。换句话说,我们应当依附他们的接口,而不是依附它们的实现。我们可以检查文档,但它不是最好的开辟人员体验 - 它须要更多的时光,文档往往是过时的。
所以固然很轻易攫取jQuery.ajax(url,settings),要真正懂得若何调用这个函数,我们须要攫取它的源码或其文档。
如今,将其邮攀类型版本比较
- ajax(url: string, settings?: JQueryAjaxSettings): JQueryXHR;
- interface JQueryAjaxSettings {
- async?: boolean;
- cache?: boolean;
- contentType?: any;
- headers?: { [key: string]: any; };
- //...
- }
- interface JQueryXHR {
- responseJSON?: any; //...
- }
它给了我们更多的信息。
- 这个函数的第一个参数是一个字符串。
- settings参数是可选的。我们可以看到可以传递给函数的所有选项,不仅仅是它们的名字,还包含它们的类型。
- 该函数返回一个JQueryXHR对象,我们可以看到它的属性和函数。
与其他编译为JavaScript的说话比拟,TypeScript的类型是可选的,jQuery.ajax(url, settings)仍然是有效的typescript。所以并不长短开即关,TypeScript更多的是加强。如不雅发明代码在攫取和懂得时没有类型注释是眇乎小哉的,请不要应用它们。只有在增长价值的情况下应用他们。
TypeScript是否限制表达?
TypeScript有很好的对象
- const PersonRecord = Record({name:null, age:null});
- function createPerson(name, age) {
- return new PersonRecord({name, age});
- }
- const p = createPerson("Jim", 44);
- expect(p.name).toEqual("Jim");
我们若何肯定记录的类型?让我们来定义一个Person接口。
- interface Person { name: string, age: number };
如不雅我们测验测验履行以下操作:
- function createPerson(name: string, age: number): Person {
- return new PersonRecord({name, age});
- }
TypeScript编译器就会警告,因为编译器不知道PersonRecord和Person类型兼容。一些有函数式编程经验的人会说:“TypeScript只有依附类型!”。然则不是如许的。TypeScript的类型体系不是最先辈的。但它的目标是不合的。这不是证实法度榜样是100%精确的。它更多的是供给给你更多的提示信息和启用更强大年夜的对象。所以当类型体系不敷灵活时,可以采取快捷方法。所以我们可以转换创建的记录,经由过程下面如许: