Declaration Merging with TypeScript
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Declaration Merging with TypeScript,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3381字,纯文字阅读大概需要5分钟。
内容图文

原文:https://blog.oio.de/2014/03/21/declaration-merging-typescript/
Why might you need this?
There can be several scenarios where this might be required. One of the most common ones is when you want to extend an existing JavaScript library that comes with a type definition.
---------------------------------------------------
Declaration Merging with TypeScript
Declaration merging is a very interesting feature of TypeScript, the statically typed superset of JavaScript.
As you will see, different things can be merged in TypeScript.
The merging is always based on matching names, so as soon as two e.g. interfaces have the same name (and live in the same namespace), they will get merged.
What can be merged in TypeScript?
In TypeScript it is possible two merge
– mutliple interfaces
– multiple modules
– modules with classes
– modules with functions
– modules with enums
Merging multiple interfaces
To merge multiple interfaces, simply give them the same name.
1
2
3
4
5
6
7
8
|
interface
Foo {
doIt();
}
interface
Foo {
doSomething();
doSomethingDifferent();
}
|
This will result in a merged interface as follows.
1
2
3
4
5
|
interface
Foo {
doSomething();
doSomethingDifferent();
doIt();
}
|
As you can see, the two interfaces are merged in reverse order, but the order of the declarations in each individual interface is not changed.
A reverse merge order is important if you want to extend a library.
Merging multiple modules
Modules with the same name will merge their members, effectively creating a common namespace.
1
2
3
4
5
6
7
|
module mod {
export
class
Foo { }
}
module mod {
export
class
Bar
extends
Foo { }
}
|
Merging modules is a common task if you use internal modules with TypeScript. It enables you two use the one class per file best practice while placing multiple classes inside the same namespace.
If you have a Java background, merging modules can be compared to putting multiple classes inside the same package.
Merging modules with classes, functions and enums
You can merge modules with classes, functions and enums. This might sound strange, but it allows you to extend these constructs with additional properties in a typesafe way.
Here is an example on how to extend a function with properties, which is a common practice in the JavaScript world:
1
2
3
4
5
6
7
|
function
greet() {
console.log(
"Hello "
+ greet.target);
}
module greet {
export
var
target =
"World"
;
}
|
Here is another example that extends an enum with a method:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
enum
UserType {
ADMIN, USER, GUEST
}
module UserType {
export
function
parse(value: string): UserType {
var
UT: any = UserType;
if
(
typeof
UserType[value] ===
"undefined"
) {
throw
new
Error(
"unknown value of enum UserType: "
+ value);
}
return
UserType[value];
}
}
|
As you can see in another blog post, merging a class with a module containing another class can be used to create inner classes.
What cannot be merged in TypeScript?
In the current TypeScript version (1.0RC at the time of writing), it is not possible to merge the following:
– multiple classes
– classes with variables
– classes with interfaces
This may change in future TypeScript versions.
Mixins could be an alternative approach for these things.
For additional information, take a look at the wiki page at Codeplex.
原文:https://www.cnblogs.com/oxspirt/p/9929738.html
内容总结
以上是互联网集市为您收集整理的Declaration Merging with TypeScript全部内容,希望文章能够帮你解决Declaration Merging with TypeScript所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。