是否有一种语法允许在函数文字上使用泛型类型参数?我知道我可以用以下方法包装它:
def createLongStringFunction[T](): (T) => Boolean = {
(obj: T) => obj.toString.length > 7
}
Run Code Online (Sandbox Code Playgroud)
但后来我最终需要为每个类型T调用该方法并获得一个新函数.我查看了语言参考,虽然我看到函数文字语法由编译器转换为一个本身具有泛型输入类型的Functionn对象的实例,但看起来编译器魔术在创建时实现了这些参数.我还没有找到任何允许我实际上"保留Functionn的一个或多个类型参数未绑定"的语法.我更喜欢的是:
// doesn't compile
val longStringFunction: [T](T) => Boolean = (obj: T) => obj.toString.length > 7
Run Code Online (Sandbox Code Playgroud)
有这样的事情吗?或者就此而言,当扩展方法具有通用参数时,eta扩展函数的显式类型是什么?
这是一个纯粹的人为和无用的例子.当然我可以在这里使用Any功能.
首先,不,我不是要为我的JavaScript代码创建任何类似Java的界面.我已经看到了这些问题,虽然我仍然是JavaScript的相对新手,但是我的思绪在这个想法中畏缩了(IMO).
但是,我很好奇interface关键字的实际用途是什么.例如,Math是一个包含定义(但不是实现)的接口.我相信(并且可能完全错误)这些是为语言的定义者提供一种手段来强制执行在各种JavaScript引擎中实现的一组行为.那是对的吗?
此外,我希望有一个包含一堆实用方法的"静态类".我喜欢Math.sqrt(3)有一个外部命名空间('Math'),它是大写的,并且有许多逻辑上类似的方法和值.也许只是我的Java/Ruby背景让我想要分组对象的资金.这是不好的形式?
var ShapeInspections = {
isSymmetrical: function (s) {
// determine if shape is symmetrical
},
numAngles: function (s) {
// return the number of angles
}
}
Run Code Online (Sandbox Code Playgroud)
一个纯粹人为的例子,但用这种方式命名"模块"是否反对惯用?
假设我有这样的类型:
type Person = {
firstName: string;
lastName: string;
contact: {
type: string;
value: string;
}[];
};
Run Code Online (Sandbox Code Playgroud)
如果我想要数组元素的类型contact,我可以使用索引访问类型,例如:
type Contact = User['contact'][number];
// same as type Contact = { type: string; value: string };
Run Code Online (Sandbox Code Playgroud)
本质上,“数组数字索引处的类型contacts”,也适用于嵌套对象。
但是,如果这是一个可选参数,例如:
type Person = {
firstName: string;
lastName: string;
contact?: {
type: string;
value: string;
}[];
};
Run Code Online (Sandbox Code Playgroud)
这(有效)报告了以下错误:
Type '{ type: string; value: string; }[] | undefined' has no matching index signature for type 'number'.ts(2537)
Run Code Online (Sandbox Code Playgroud)
如何在类型别名中“空检查”以获得嵌套类型?
我有一个问题,故事所描述的原因.为了尊重读者的时间,可以跳过故事部分.:)
简短:有没有办法检查对git存储库的更改,但是"隐藏"变更集元数据与一般消费(保留先前的变更集中的责任等)?
很长时间(随意跳过剩下的部分):我最近继承了一个代码库,从它的外观来看,它有一个最初的团队领导,鼓励他的每个开发人员 - 作为精神成长的练习 - 来觅食进入这个世界并找到一种他觉得最像禅宗的格式化风格......真正找到他们各种艺术风格,将它们应用于代码格式化,并在每天绘制代码杰作时过着艺术家的生活.出现了一些模式,例如随机选择语句之间的换行符数,包装每个方法参数 - 声明和调用......它一直在继续,但基本上我想在IDE中设置我的格式化首选项,将它转为松散几个小时,清理混淆的地方,并提交它.我从团队那里得到了一些(有效的)推迟,因为在注释中显示的容易看见的"最后一个触摸它"插槽中丢失了所有历史记录.有没有什么办法可以做出不会让那些东西消失的改变?我也在想,可能会有一个分支技巧,可以做分支,格式化分支,将另一个分支重新整合到那个分支中,以某种方式使我的"秘密提交"升级最新的保留旧的那些.
有人有什么建议吗?我完全愿意为这一次性招待黑客.:)