我如何在打字稿中定义这个对象?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我如何在打字稿中定义这个对象?相关的知识,希望对你有一定的参考价值。
我有以下对象,我想强制执行谁的结构。
{
'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'
}
}
请注意,上述内容不会阻止嵌套对象拥有多个键。
或者你可以获得超级通用(但它可能是矫枉过正):
interface KeyValuePair<T> { [key: string]: T };
let x: KeyValuePair<KeyValuePair<string>> = {
'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'
}
}
好吧,你可以做到这一点。
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'
}
}
]
之后,在您的打字稿控制器上,您可以将其导入为您想要的任何名称
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, ...
那么你只有那个对象里面的属性。
你不能影响另一个具有username
或passwordGroup
等其他财产的物体......
请在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';
用于声明Login对象数组的类型
let login: Login[];
我建议你创建一个Login类,用于在登录变量中插入数据。
TypeScript 2.2引入了一种名为object的新类型。它表示任何非基本类型。以下类型被认为是javascript中的原始类型:
boolean
number
string
symbol
null
undefined
所有其他类型都被认为是非原始类型。新对象类型恰好代表:
所有原始类型
类型Primitive = |布尔值|号码|字符串|符号| null |不确定的;
所有非原始类型
type NonPrimitive = object;
让我们看看对象如何让我们编写更准确的类型声明。使用对象类型键入声明
随着TypeScript 2.2的发布,标准库的类型声明已经更新,以使用新的对象类型。例如,Object.create()和Object.setPrototypeOf()方法现在指定类型对象| null为其原型参数:
以上是关于我如何在打字稿中定义这个对象?的主要内容,如果未能解决你的问题,请参考以下文章