我想定义一个带有可选字段的接口.我认为以下是同义词.
(A):
interface State {
userDetails: undefined | string | DataStructure | Error;
}
Run Code Online (Sandbox Code Playgroud)
(B):
interface State {
userDetails?: string | DataStructure | Error;
}
Run Code Online (Sandbox Code Playgroud)
但是当我初始化状态时,(A)强制我将字段显式设置为undefined,如下所示:
static readonly initialAppState: AppState = {
userDetails: undefined
};
Run Code Online (Sandbox Code Playgroud)
但是(B)我可以完全省略该字段:
static readonly initialAppState: AppState = { };
Run Code Online (Sandbox Code Playgroud)
如果我在使用定义时试图省略该字段,(A)那么会不会抱怨说:
Property 'userDetails' is missing in type
Run Code Online (Sandbox Code Playgroud)
为什么在使用定义时必须明确设置字段(A)?在初始化时强制这种不同要求的两个定义之间有什么区别?
Typesript版本:2.3.4
Sam*_*eff 11
即使在运行时,具有未定义值的键与不存在的键之间也存在差异.TypeScript允许区分并不奇怪.
试试这个:
Object.keys({a: undefined});
Run Code Online (Sandbox Code Playgroud)
如果a省略并设置它的值是undefined相同的东西那么我们期望上面返回一个空数组,但实际上它返回
[ 'a' ]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1070 次 |
| 最近记录: |