Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
Y
yifu-study-front-share
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
CI / CD
CI / CD
Pipelines
Schedules
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
yifu-study
front
yifu-study-front-share
Commits
88c32d09
Commit
88c32d09
authored
Sep 30, 2022
by
杨靖
😂
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
代码提交
parent
d14bcf65
Pipeline
#16879
failed with stage
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
165 additions
and
0 deletions
+165
-0
typeScript模块解析.md
source/_posts/typeScript模块解析.md
+165
-0
No files found.
source/_posts/typeScript模块解析.md
0 → 100644
View file @
88c32d09
---
title: TypeScript基础类型
date: 2022/09/30 9:00:00
tags:
-
前端
-
typescript
author: 杨靖
---
#### 小提示
TypeScript 1.5里术语名已经发生了变化。 “内部模块”现在称做“命名空间”。 “外部模块”现在则简称为“模块”,这是为了与 ECMAScript 2015里的术语保持一致,(也就是说 module X { 相当于现在推荐的写法 namespace X {)。
## 介绍
如同JS的ES5中模块说明,模块在其自身的作用域里执行,而不是在全局作用域里;这意味着定义在一个模块里的变量,函数,类等等在模块外部是不可见的,除非你明确地使用export形式之一导出它们。 相反,如果想使用其它模块导出的变量,函数,类,接口等的时候,你必须要导入它们,可以使用 import形式之一。
模块是自声明的;两个模块之间的关系是通过在文件级别上使用imports和exports建立的。
模块使用模块加载器去导入其它的模块。 在运行时,模块加载器的作用是在执行此模块代码前去查找并执行这个模块的所有依赖。 大家最熟知的JavaScript模块加载器是服务于Node.js的 CommonJS和服务于Web应用的Require.js。
TypeScript与ECMAScript 2015一样,任何包含顶级import或者export的文件都被当成一个模块。相反地,如果一个文件不带有顶级的import或者export声明,那么它的内容被视为全局可见的(因此对模块也是可见的)。
## 导出
#### 导出声明
任何声明(比如变量,函数,类,类型别名或接口)都能够通过添加export关键字来导出。
```
typescript
export
interface
StringValidator
{
isAcceptable
(
s
:
string
):
boolean
;
}
```
```
typescript
export
const
numberRegexp
=
/^
[
0-9
]
+$/
;
export
class
ZipCodeValidator
implements
StringValidator
{
isAcceptable
(
s
:
string
)
{
return
s
.
length
===
5
&&
numberRegexp
.
test
(
s
);
}
}
```
#### 导出语句
```
typescript
class
ZipCodeValidator
implements
StringValidator
{
isAcceptable
(
s
:
string
)
{
return
s
.
length
===
5
&&
numberRegexp
.
test
(
s
);
}
}
export
{
ZipCodeValidator
};
export
{
ZipCodeValidator
as
mainValidator
};
```
#### 重新导出
我们经常会去扩展其它模块,并且只导出那个模块的部分内容。 重新导出功能并不会在当前模块导入那个模块或定义一个新的局部变量。
```
typescript
export
class
ParseIntBasedZipCodeValidator
{
isAcceptable
(
s
:
string
)
{
return
s
.
length
===
5
&&
parseInt
(
s
).
toString
()
===
s
;
}
}
// 导出原先的验证器但做了重命名
export
{
ZipCodeValidator
as
RegExpBasedZipCodeValidator
}
from
"./ZipCodeValidator"
;
```
```
typescript
export
*
from
"./StringValidator"
;
// exports interface StringValidator
export
*
from
"./LettersOnlyValidator"
;
// exports class LettersOnlyValidator
export
*
from
"./ZipCodeValidator"
;
// exports class ZipCodeValidator
```
## 导入
使用以下 import形式之一来导入其它模块中的导出内容。
#### 导入一个模块中的某个导出内容
```
typescript
import
{
ZipCodeValidator
}
from
"./ZipCodeValidator"
;
let
myValidator
=
new
ZipCodeValidator
();
```
可以对导入内容重命名
```
typescript
import
{
ZipCodeValidator
as
ZCV
}
from
"./ZipCodeValidator"
;
let
myValidator
=
new
ZCV
();
```
#### 将整个模块导入到一个变量,并通过它来访问模块的导出部分
```
typescript
import
*
as
validator
from
"./ZipCodeValidator"
;
let
myValidator
=
new
validator
.
ZipCodeValidator
();
```
#### 具有副作用的导入模块
尽管不推荐这么做,一些模块会设置一些全局状态供其它模块使用。 这些模块可能没有任何的导出或用户根本就不关注它的导出。 使用下面的方法来导入这类模块:
```
typescript
import
"./my-module.js"
;
```
## 默认导出
每个模块都可以有一个default导出。 默认导出使用 default关键字标记;并且一个模块只能够有一个default导出。 需要使用一种特殊的导入形式来导入 default导出。
default导出十分便利。 比如,像JQuery这样的类库可能有一个默认导出 jQuery或$,并且我们基本上也会使用同样的名字jQuery或$导出JQuery。
```
typescript
declare
let
$
:
JQuery
;
export
default
$
;
```
```
typescript
import
$
from
"JQuery"
;
$
(
"button.continue"
).
html
(
"Next Step..."
);
```
类和函数声明可以直接被标记为默认导出。 标记为默认导出的类和函数的名字是可以省略的。
```
typescript
export
default
class
ZipCodeValidator
{
static
numberRegexp
=
/^
[
0-9
]
+$/
;
isAcceptable
(
s
:
string
)
{
return
s
.
length
===
5
&&
ZipCodeValidator
.
numberRegexp
.
test
(
s
);
}
}
```
```
typescript
import
validator
from
"./ZipCodeValidator"
;
let
myValidator
=
new
validator
();
```
```
typescript
const
numberRegexp
=
/^
[
0-9
]
+$/
;
export
default
function
(
s
:
string
)
{
return
s
.
length
===
5
&&
numberRegexp
.
test
(
s
);
}
```
```
typescript
import
validate
from
"./StaticZipCodeValidator"
;
let
strings
=
[
"Hello"
,
"98052"
,
"101"
];
// Use function validate
strings
.
forEach
(
s
=>
{
console
.
log
(
`"
${
s
}
"
${
validate
(
s
)
?
" matches"
:
" does not match"
}
`
);
});
```
default导出也可以是一个值
```typescript
export default "123";
import num from "./OneTwoThree";
console.log(num); // "123"
```
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment