Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
typescript-instanceof的数组_Typescript_Inheritance - Fatal编程技术网

typescript-instanceof的数组

typescript-instanceof的数组,typescript,inheritance,Typescript,Inheritance,我想知道typescript是否可以通过从基本控件子体派生来实现对象的类型 interface Config { name: string; } interface Input extends Config { placeholder?: string; } interface Select extends Config { options: Array<Option>; } const fields: Array<Config> = [ { nam

我想知道typescript是否可以通过从基本控件子体派生来实现对象的类型

interface Config {
  name: string;
}

interface Input extends Config {
  placeholder?: string;
}

interface Select extends Config {
  options: Array<Option>;
}

const fields: Array<Config> = [
  { name: 'a', placeholder: 'a'}, // placeholder does not exist in type 'config'
  { name: 'b', options: []} // options does not exist in type 'config'
]
接口配置{
名称:字符串;
}
接口输入扩展配置{
占位符?:字符串;
}
界面选择扩展配置{
选项:阵列;
}
常量字段:数组=[
{name:'a',占位符:'a'},//占位符在类型'config'中不存在
{name:'b',options:[]}//类型'config'中不存在选项
]
也尝试过类似的事情

interface Config<T> {
  name: string;
  fieldType: T
}

interface Input extends Config<'input'> {
  placeholder?: string;
}

接口配置{
名称:字符串;
字段类型:T
}
接口输入扩展配置{
占位符?:字符串;
}

有人可以重定向吗?

实现重定向的最简单方法是使用

const fields: Array<Select | Input> = [
  { name: 'a', placeholder: 'a'},
  { name: 'b', options: []}
]

实现这一点的最简单方法是使用

const fields: Array<Select | Input> = [
  { name: 'a', placeholder: 'a'},
  { name: 'b', options: []}
]

如果您想对
字段中的所有单个元素强制执行强类型,同时保持其
数组
类型,那么这将是类型断言的好地方

const fields: Array<Config> = [
  { name: 'a', placeholder: 'a'} as Input, 
  { name: 'b', options: [] } as Select,
  { name: 'a', placeholder: 42} as Input,  // error: placeholder has number
   {options: []} as Select // error: name is missing
]
const字段:数组=[
{name:'a',占位符:'a'}作为输入,
{name:'b',选项:[]}作为选择,
{name:'a',占位符:42}作为输入,//错误:占位符有编号
{options:[]}作为选择//错误:缺少名称
]

如果希望对
字段中的所有单个元素强制执行强类型,同时保持其
数组的类型,那么这将是进行类型断言的好地方

const fields: Array<Config> = [
  { name: 'a', placeholder: 'a'} as Input, 
  { name: 'b', options: [] } as Select,
  { name: 'a', placeholder: 42} as Input,  // error: placeholder has number
   {options: []} as Select // error: name is missing
]
const字段:数组=[
{name:'a',占位符:'a'}作为输入,
{name:'b',选项:[]}作为选择,
{name:'a',占位符:42}作为输入,//错误:占位符有编号
{options:[]}作为选择//错误:缺少名称
]

在几十个后代的情况下试图避免这种情况。。。必须声明一个
类型configdownats=Input | Select | TextArea |任何其他扩展的
希望暴露于某种内置注释,如
部分
。。可能是
的实例,但谢谢。。《希望的破灭》让我在向
Config
添加
fieldType:FIELD\u TYPES
的同时做了这件事,并在每个子体中指定了
fieldType
Input{fieldType:FIELD\u TYPES.Input,placeholder?:string};因此,typescript现在根据
fieldType`公开了正确的允许字段,并试图在几十个子体的情况下避免这种情况。。。必须声明一个
类型configdownats=Input | Select | TextArea |任何其他扩展的
希望暴露于某种内置注释,如
部分
。。可能是
的实例,但谢谢。。《希望的破灭》让我在向
Config
添加
fieldType:FIELD\u TYPES
的同时做了这件事,并在每个子体中指定了
fieldType
Input{fieldType:FIELD\u TYPES.Input,placeholder?:string};因此,typescript现在根据
fieldType`显示您的用例吗?为什么您需要注释
字段
?您可以编写
const fields=[{name:'a',占位符:'a'},{name:'b',options:[]}]
并获取一个对象,该对象将被任何需要类型
Array
的值的对象所接受。您是否需要保证
字段的每个元素符合您声明的
配置扩展名之一?如果是这样的话,您需要在代码中的某个地方使用这些类型的联合,这就是建议,但您说您希望避免这种情况。您能展示一下您的用例吗?为什么您需要注释
字段
?您可以编写
const fields=[{name:'a',占位符:'a'},{name:'b',options:[]}]
并获取一个对象,该对象将被任何需要类型
Array
的值的对象所接受。您是否需要保证
字段的每个元素符合您声明的
配置扩展名之一?如果是这样的话,您需要在代码中的某个地方使用这些类型的联合,这就是建议,但您说希望避免这种情况。类型断言将允许
{name:'a'}作为输入
,但这可能并不理想。我想就是这样。。。正如@thomashiebaud所建议的那样,很明显,我不能要求typescript在没有明确声明的情况下找到匹配的后代。否则它会扫描整个宇宙。也许有一天会成为一个特色。之所以接受此选项,是因为它还允许动态集成,而无需强键入所有当前可用的类型。hm不确定,您的确切意思是什么,因为
占位符
输入
的可选属性。因此,我将考虑<代码> {名称:“a”} /代码>,作为赋值给<代码>输入< /代码>。类型断言允许<代码> {No:A`}作为输入< /代码>,但是,这可能不太理想。正如@thomashiebaud所建议的那样,很明显,我不能要求typescript在没有明确声明的情况下找到匹配的后代。否则它会扫描整个宇宙。也许有一天会成为一个特色。之所以接受此选项,是因为它还允许动态集成,而无需强键入所有当前可用的类型。hm不确定,您的确切意思是什么,因为
占位符
输入
的可选属性。因此,我将考虑<代码> {Ne:A`}} /Case>,作为赋值给<代码>输入< /代码>。