Angular 如何在typescript中定义此对象?

Angular 如何在typescript中定义此对象?,angular,typescript,Angular,Typescript,我有以下的目标,我想强制执行世卫组织的结构 { 'username': { required: 'Please enter your username.' }, 'passwordGroup': { ocMatchFields: 'Passwords do not match' }, 'passwordGroup.password': { required: 'Please enter your password'

我有以下的目标,我想强制执行世卫组织的结构

{
    'username': {
      required: 'Please enter your username.'
    },
    'passwordGroup': {
      ocMatchFields: 'Passwords do not match'
    },
    'passwordGroup.password': {
      required: 'Please enter your password'
    },
    'passwordGroup.confirmPassword': {
      required: 'Please confirm your password'
    }
}
它的嵌套永远不会比显示的更深,值总是字符串,但可以有任意数量的“字段”。本例中的字段是第一级键。用户名、密码组等

我曾经遇到过这样一种东西,它将一个对象描述为
{[key:string]:boolean}
,这让我相信它是可能的


我可以考虑如何将其表示为一个集合,因为这将是一个对象数组,但我不确定如何将其描述为一个嵌套对象结构。

了解TypeScript,我可能忽略了一些很棒的语法。但有一种方法:

interface StringToString { [key: string]: string };
interface MyNested { [key: string]: StringToString };

let x: MyNested = {
    'username': {
        required: 'Please enter your username.'
    },
    'passwordGroup': {
        ocMatchFields: 'Passwords do not match'
    },
    'passwordGroup.password': {
        required: 'Please enter your password'
    },
    'passwordGroup.confirmPassword': {
        required: 'Please confirm your password'
    }
}
请注意,上述操作并不阻止嵌套对象具有多个键

或者你可以得到超级通用(但这可能是过分的):

接口KeyValuePair{[key:string]:T};
设x:KeyValuePair={
“用户名”:{
必填项:“请输入您的用户名。”
},
“密码组”:{
ocMatchFields:'密码不匹配'
},
“passwordGroup.password”:{
必需:“请输入您的密码”
},
“passwordGroup.confirmPassword”:{
必需:“请确认您的密码”
}
}

了解TypeScript,我可能忽略了一些很棒的语法。但有一种方法:

interface StringToString { [key: string]: string };
interface MyNested { [key: string]: StringToString };

let x: MyNested = {
    'username': {
        required: 'Please enter your username.'
    },
    'passwordGroup': {
        ocMatchFields: 'Passwords do not match'
    },
    'passwordGroup.password': {
        required: 'Please enter your password'
    },
    'passwordGroup.confirmPassword': {
        required: 'Please confirm your password'
    }
}
请注意,上述操作并不阻止嵌套对象具有多个键

或者你可以得到超级通用(但这可能是过分的):

接口KeyValuePair{[key:string]:T};
设x:KeyValuePair={
“用户名”:{
必填项:“请输入您的用户名。”
},
“密码组”:{
ocMatchFields:'密码不匹配'
},
“passwordGroup.password”:{
必需:“请输入您的密码”
},
“passwordGroup.confirmPassword”:{
必需:“请确认您的密码”
}
}
好吧,你可以这样做

export default [
{
    'username': {
      required: 'Please enter your username.'
    },
    'passwordGroup': {
      ocMatchFields: 'Passwords do not match'
    },
    'passwordGroup.password': {
      required: 'Please enter your password'
    },
    'passwordGroup.confirmPassword': {
      required: 'Please confirm your password'
    }
}
]
稍后,在您的typescript控制器上,您可以将其作为任何您想要的名称导入

import nameYouWant from 'adrees-file-src-exist-json'
好吧,你可以这样做

export default [
{
    'username': {
      required: 'Please enter your username.'
    },
    'passwordGroup': {
      ocMatchFields: 'Passwords do not match'
    },
    'passwordGroup.password': {
      required: 'Please enter your password'
    },
    'passwordGroup.confirmPassword': {
      required: 'Please confirm your password'
    }
}
]
稍后,在您的typescript控制器上,您可以将其作为任何您想要的名称导入

import nameYouWant from 'adrees-file-src-exist-json'

可以通过以下方式声明该类型的对象:

myObject: {
  'username': {
    required: string
  },
  'passwordGroup': {
    ocMatchFields: string;
  },
  'passwordGroup.password': {
    required: string
  },
  'passwordGroup.confirmPassword': {
    required: string
  }
}
这样,您就可以执行以下操作:

myObject.username, ...
然后,该对象中只有这些属性


您不能影响另一个对象,该对象具有除
用户名
密码组
等以外的其他属性。

您可以通过以下方式声明该类型的对象:

myObject: {
  'username': {
    required: string
  },
  'passwordGroup': {
    ocMatchFields: string;
  },
  'passwordGroup.password': {
    required: string
  },
  'passwordGroup.confirmPassword': {
    required: string
  }
}
这样,您就可以执行以下操作:

myObject.username, ...
然后,该对象中只有这些属性


除了
用户名
密码组
等属性之外,您不能影响另一个对象。

类型脚本2.2引入了一种称为对象的新类型。它表示任何非基元类型。以下类型被认为是JavaScript中的基本类型:

boolean
number
string
symbol
null
undefined
所有其他类型都被视为非基本类型。新对象类型正好表示以下内容:

所有基本类型

类型原语= |布尔值 |数 |串 |象征 |空的 |未定义

所有非原始类型

类型非原语=对象

让我们看看object如何让我们编写更准确的类型声明。 使用对象类型的类型声明


随着TypeScript 2.2的发布,标准库的类型声明已经更新,以使用新的对象类型。例如,Object.create()和Object.setPrototypeOf()方法现在为它们的原型参数指定类型Object | null:

TypeScript 2.2引入了一种称为Object的新类型。它表示任何非基元类型。以下类型被认为是JavaScript中的基本类型:

boolean
number
string
symbol
null
undefined
所有其他类型都被视为非基本类型。新对象类型正好表示以下内容:

所有基本类型

类型原语= |布尔值 |数 |串 |象征 |空的 |未定义

所有非原始类型

类型非原语=对象

让我们看看object如何让我们编写更准确的类型声明。 使用对象类型的类型声明


随着TypeScript 2.2的发布,标准库的类型声明已经更新,以使用新的对象类型。例如,Object.create()和Object.setPrototypeOf()方法现在为其原型参数指定类型Object | null:

请在LoginInterface.ts中声明这些类型

export interface IfcRequired {
    required: String;       
}

export interface IfcOCMatchFields {
    ocMatchFields: String;
}

export interface Login {
    username: IfcRequired;
    password: IfcOCMatchFields;
    passwordGroup.password: IfcRequired;
    passwordGroup.confirmPassword: IfcRequired;   
}
要使用这些接口,请使用

import {IfcRequired, IfcOCMatchFields, Login} from 'LoginInterface';
用于声明登录对象数组的类型

let login: Login[];

我建议您创建一个登录类,用于在登录变量中插入数据。

请在LoginInterface.ts中声明这些类型

export interface IfcRequired {
    required: String;       
}

export interface IfcOCMatchFields {
    ocMatchFields: String;
}

export interface Login {
    username: IfcRequired;
    password: IfcOCMatchFields;
    passwordGroup.password: IfcRequired;
    passwordGroup.confirmPassword: IfcRequired;   
}
要使用这些接口,请使用

import {IfcRequired, IfcOCMatchFields, Login} from 'LoginInterface';
用于声明登录对象数组的类型

let login: Login[];

我建议您创建一个登录类,用于在登录变量中插入数据。

单个对象是否将包含一对用户名和密码组?是的,这是正确的。单个对象是否将包含一对用户名和密码组?是的,这是正确的Generic结构是我试图建模的,我给出的对象只是一个例子。我不知道对象的属性会是什么。好吧,我已经用过很多次了,因为我需要一个只有预定义属性的对象。是的,这在那个用例中完全有意义。谢谢你的时间和回答。Generic结构正是我试图建模的,我给出的对象只是一个例子。我不知道对象的属性会是什么。好吧,我已经用过很多次了,因为我需要一个只有预定义属性的对象。是的,这在使用中完全有意义