interface INotificationService {
error(message: string, title?: string, autoHideAfter?: number);
error(message: string, autoHideAfter: number);
}
class MyNotificationService implements INotificationService {
error(message: string, title?: string, autoHideAfter?: number);
error(message: string, autoHideAfter?: number);
error(message: string, param1?: (string|number), param2?: number) {
var autoHideAfter: number,
title: string;
// example of mapping the parameters
if (param2 != null) {
autoHideAfter = param2;
title = <string> param1;
}
else if (param1 != null) {
if (typeof param1 === "string") {
title = param1;
}
else {
autoHideAfter = param1;
}
}
// use message, autoHideAfter, and title here
}
}
现在所有这些都可以工作了:
var service: INotificationService = new MyNotificationService();
service.error("My message");
service.error("My message", 1000);
service.error("My message", "My title");
service.error("My message", "My title", 1000);
...而INotificationService的error方法将有以下选项:
<一个href = " http://www.typescriptlang.org/Playground/ src =接口% 20 inotificationservice % 7 b % d % 0 a % 20% 20% 20% 20% 20错误消息(% % 20字符串3 % 2 3 c % 20标题% 3 f % % 20字符串% 2 3 c % 20 autohideafter % 3 f % % 20号)% 3 b % d % 0 a % 09年错误(消息% % % 20字符串3 2 3 c % 20 autohideafter % % 20号)% 3 b % d % 0 a % 7 d % 0 d % 0 a % d % 0 aclass % 20 mynotificationservice % 20实现% 20 inotificationservice % 7 b % d % 0 a % 20% 20% 20% 20% 20错误消息(% % 20字符串3 % 2 3 c % 20标题% 3 f % % 20字符串% 2 3 c % 20 autohideafter % 3 f % % 20号)% 3 b % d % 0 a % 09错误消息(% % % 20 3字符串2 c % 20 autohideafter % 3 f % % 20号)% 3 b % 3 0 d % 0 a % 09年错误消息(% % % 20字符串3 2 3 c % 20 param1 % 3 f % % 20 (string % 7 cnumber) % 2 c % 20 param2 3 % 3 f % % 20号)% 20% 7 b % d % 0 a % 09% 09 var % 20 autohideafter % 3 % 20号% 2 c % 0 d % 0 a % 09% 09% 09冠军% 3 % 20字符串% 3 b % d % 0 0 d % 0 a % % 09% 09% 09% 09% 2 f % 2 f % 20例% 20 % 20映射的% 20 % 20参数% 0 d % 0 a % 09% 09年如果% 20 (param2 % 20 ! % 3 d % 20 null) % 7 b % d % 0 a % 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20 autohideafter % 20% 3 d % 20 param2 % 3 b % 0 d % 0 a % 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20标题3 d % % 20% 20% 3装运箱% 3 e % 20 param1 % 3 b % 0 d %0 a % 20% 20% 20% 20% 20% 20% 20% 20% 7 d % 0 d % 0 a % 20% 20% 20% 20% 20% 20% 20% 20其他% 20如果% 20 (param1 % 20 ! % 3 d % 20 null) % 7 b % d % 0 a % 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20如果% 20 (typeof % 20 param1 % 20% 3 d % 3 d % 3 d % 22字符串20% % 22)% 7 b % d % 0 a % 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20标题% 20% 3 d % 20 param1 % 3 b % d % 0 a % 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 7 d % d % 0 a % 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20其他% 7 b % d % 0 a % 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20 autohideafter % 20% 3 d % 20 param1 % 3 b % d % 0 a % 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 7 d% 0 d % 0 a % 20% 20% 20% 20% 20% 20% 20% 20% 7 d % d % 0 0 d % 0 a % % 09% 09% 09%, 09年console.log(消息% 2 c % 20标题% 2 c % 20 autohideafter) % 3 b % d % 0 7 09% % d % d % 0 a % 7 d % 0 d % 0 a % d % 0阿瓦尔人% 20服务% 20% 3 d % 20新% 20 mynotificationservice () % 3 b % d % 0 aservice.error(% 22我% 20消息% 22)% 3 b % d % 0 aservice.error(% 22我% 20消息% 22% 2 c % 201000) % 3 b % d % 0 aservice.error(% 22我% 20消息% 22% 2 c % 22 20% % 20标题% 22)% 3 b % d % 0 aservice.error(% 22我% 20消息% 22% 2 c % 22 20% % 20标题% 22% 2 c % 201000) % 3 b nofollow noreferrer“rel = >操场< / >
export interface IErrorParams {
title?: string;
autoHideAfter?: number;
}
export interface INotificationService {
// make params optional so you don't have to pass in an empty object
// in the case that you don't want any extra params
error(message: string, params?: IErrorParams);
}
// all of these will work as expected
error('A message with some params but not others:', {autoHideAfter: 42});
error('Another message with some params but not others:', {title: 'StackOverflow'});
error('A message with all params:', {title: 'StackOverflow', autoHideAfter: 42});
error('A message with all params, in a different order:', {autoHideAfter: 42, title: 'StackOverflow'});
error('A message with no params at all:');
function buildName(firstName: string, lastName?: string) {
if (lastName) return firstName + " " + lastName;
else return firstName;
}
let result1 = buildName("Bob"); // works correctly now
let result2 = buildName("Bob", "Adams", "Sr."); // error, too many parameters
Expected 1-2 arguments, but got 3.
let result3 = buildName("Bob", "Adams"); // ah, just right