不确定这是否是一个愚蠢的问题,但我只是注意到了这一点:
public interface IActivityDao : IDao<Activity>
{
IList<Activity> GetAllSinceSequence(long sequence, int count);
}
public class ActivityDao : AbstractNHibernateDao<Core.Domain.Activity>, IActivityDao
{
public IList<Activity> GetAllSinceSequence(long sequence, int maxRecords)
{
}
}
Run Code Online (Sandbox Code Playgroud)
在我的实现中,我调用了第二个参数'maxRecords'.然而,在界面中,它被定义为"计数".编译器仍然认为接口已实现,这很好,但可能会导致一些歧义.显然,我应该重命名其中一个参数以匹配另一个参数.
在重命名之前我玩了一下,发现了一些有趣的东西.我不允许将我的界面声明为:
public interface IActivityDao : IDao<Activity>
{
IList<Activity> GetAllSinceSequence(long, int);
}
Run Code Online (Sandbox Code Playgroud)
这只是编译器对C#语义的过度保护吗?除了使代码更具可读性之外,接口方法中的参数名称的用途是什么?在我看来,如果在实现时不强制参数名称,它会引起歧义.
我有以下代码:
class A {
constructor(public n: number) {}
defaultFn(a: number): number {
return a + 1;
}
doStuff(callback?): number {
return callback ? callback(this.n) : this.defaultFn(this.n);
}
}
Run Code Online (Sandbox Code Playgroud)
如何告诉TypeScript callback传递给doStuff方法的可选函数应该与方法具有相同的签名defaultFn?
我有以下功能:
function (n: number) {
return {s: n};
}
Run Code Online (Sandbox Code Playgroud)
我需要为签名创建一个验证器。从我读过的内容来看,我有两个选择:
界面
interface ValidatorFnInterface {
(n: number): {
[key: string]: any;
};
}
Run Code Online (Sandbox Code Playgroud)
类型别名
type ValidatorFnType = (n: number) => {
[key: string]: any
};
Run Code Online (Sandbox Code Playgroud)
它们可以这样使用:
let f1: ValidatorFnInterface = function (n: number) {
return {s: n};
};
let f2: ValidatorFnType = function (n: number) {
return {s: n};
};
Run Code Online (Sandbox Code Playgroud)
打字稿lib.d.ts似乎在使用类型别名,而 angular2 代码似乎在使用接口。我的问题是什么时候使用什么?在决定时是否应该使用任何逻辑或者是偏好问题?