Javascript 如何在TypeScript中访问接口的底层原始字段?
我对TypeScript有点陌生,想知道如何访问扩展接口的类的原始字段 e、 gJavascript 如何在TypeScript中访问接口的底层原始字段?,javascript,typescript,interface,typescript-typings,Javascript,Typescript,Interface,Typescript Typings,我对TypeScript有点陌生,想知道如何访问扩展接口的类的原始字段 e、 g 您可以将此类型[name:string]:string | undefined视为一个对象(字典),其中所有键都是字符串,值要么是字符串,要么是未定义的 这里有几个例子可以更好地理解它: 接口字典{ [名称:字符串]:字符串|未定义 } 常量x:字典={ 姓名:'约翰', 姓:多伊 }//好的 常量:字典={ 姓名:'约翰', 1:‘你好’ }//好的,因为JS在引擎盖下进行协同,所以您可以访问x['1'] /**
您可以将此类型
[name:string]:string | undefined
视为一个对象(字典),其中所有键都是字符串,值要么是字符串,要么是未定义的
这里有几个例子可以更好地理解它:
接口字典{
[名称:字符串]:字符串|未定义
}
常量x:字典={
姓名:'约翰',
姓:多伊
}//好的
常量:字典={
姓名:'约翰',
1:‘你好’
}//好的,因为JS在引擎盖下进行协同,所以您可以访问x['1']
/**
*索引类型更通用,因为您可以使用所需的任何键
*/
y['anykey'I want']//有效,返回未定义
y['()=>{}]//就像我说的,任何键)
常量z:字典={
姓名:23
}//错误,值可以是字符串或未定义,但不能是数字
您可以将此类型[name:string]:string | undefined
视为一个对象(字典),其中所有键都是字符串,值要么是字符串,要么是未定义的
这里有几个例子可以更好地理解它:
接口字典{
[名称:字符串]:字符串|未定义
}
常量x:字典={
姓名:'约翰',
姓:多伊
}//好的
常量:字典={
姓名:'约翰',
1:‘你好’
}//好的,因为JS在引擎盖下进行协同,所以您可以访问x['1']
/**
*索引类型更通用,因为您可以使用所需的任何键
*/
y['anykey'I want']//有效,返回未定义
y['()=>{}]//就像我说的,任何键)
常量z:字典={
姓名:23
}//错误,值可以是字符串或未定义,但不能是数字
APIGatewayProxyEventHeaders
是一个对象,如下所示:
{
key1: "somevalue",
key2: "someothervalue",
key3: undefined
}
const map = new Map(Object.entries(obj))
对象的接口定义意味着您需要测试键的存在和值的存在。如果两者都是真的,那么就有一个字符串
像这样:
// const obj: APIGatewayProxyEventHeaders
if (!!obj[key]) {
// obj[key] is a string
}
if (obj.hasOwnProperty(key)) {
// obj[key] is string | undefined
}
可以将此对象转换为如下所示的贴图:
{
key1: "somevalue",
key2: "someothervalue",
key3: undefined
}
const map = new Map(Object.entries(obj))
现在您有了一个包含值的映射。但是这样做没有多大好处,因为您没有任何额外的类型信息—只有不同的数据结构。
APIGatewayProxyEventHeaders
是一个对象,如下所示:
{
key1: "somevalue",
key2: "someothervalue",
key3: undefined
}
const map = new Map(Object.entries(obj))
对象的接口定义意味着您需要测试键的存在和值的存在。如果两者都是真的,那么就有一个字符串
像这样:
// const obj: APIGatewayProxyEventHeaders
if (!!obj[key]) {
// obj[key] is a string
}
if (obj.hasOwnProperty(key)) {
// obj[key] is string | undefined
}
可以将此对象转换为如下所示的贴图:
{
key1: "somevalue",
key2: "someothervalue",
key3: undefined
}
const map = new Map(Object.entries(obj))
现在您有了一个包含值的映射。但是这并没有什么好处,因为您没有任何额外的类型信息-只是一个不同的数据结构。
我不确定[name:string]:string | undefined的类型是什么?
它是一个字符串索引对象,允许值的类型为string
或undefined
。好的,谢谢迈克!那么,我如何将其提取到它自己的变量中呢?请编辑您的问题,因为您的代码在哪里或有什么问题,或者您正试图用它做什么“访问类的原始字段”-它们只是类实例的原始属性。普通对象属性。没有“基础地图”之类的东西。我不明白,为什么这个问题被否决了@user1974753提供了一个示例我不确定[name:string]:string | undefined的类型是什么?
它是一个字符串索引对象,允许值的类型为string
或undefined
。好的,谢谢Mike!那么,我如何将其提取到它自己的变量中呢?请编辑您的问题,因为您的代码在哪里或有什么问题,或者您正试图用它做什么“访问类的原始字段”-它们只是类实例的原始属性。普通对象属性。没有“基础地图”之类的东西。我不明白,为什么这个问题被否决了@user1974753提供了一个更简单的示例:newmap(Object.entries(obj))
谢谢,我认为有一个方便的方法可以实现这一点!更简单:newmap(Object.entries(obj))
谢谢,我想这是一个方便的方法!第二个将在TypeScript中失败,因为索引类型必须是字符串。@JoshWulf您的意思是y['1']?不,TS不会失败,因为JS协同。啊,我认为尝试显式构造它是不可传输的。但你是对的。我测试了它,它进行了强制。不久前,这对我来说是一个惊喜。我也不相信。)第二个将在TypeScript中失败,因为索引类型必须是字符串。@JoshWulf你的意思是y['1']?不,TS不会失败,因为JS协同。啊,我认为尝试显式构造它是不可传输的。但你是对的。我测试了它,它进行了强制。不久前,这对我来说是一个惊喜。我也不相信