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结构正是我试图建模的,我给出的对象只是一个例子。我不知道对象的属性会是什么。好吧,我已经用过很多次了,因为我需要一个只有预定义属性的对象。是的,这在使用中完全有意义