我得到了一个无法修改的大型复杂接口 X,我想根据我想用作函数参数类型的接口 X 中的属性和子属性定义一些较小的类型。我还想避免单独重新声明 X 中已经存在的内容。
interface X {
a:number;
c:{
aa:number;
cc:{
aaa:string;
}
},
d?:{
aa:number;
cc:{
aaa:string;
}
},
e:{
aa:number;
cc:{
aaa:string;
}
}[]
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用映射类型来访问子类型 [编辑注意:子类型是错误的术语,这应该称为嵌套级别类型,请参阅下面的答案] 这应该是对象的,例如:
type C = X["c"]; // { aa:number; cc:{ aaa:string } }
type C_CC = X["c"]["cc"]; // { aaa: string }
type D = X["d"]; // { aa:number; cc:{ aaa:string } } | undefined
Run Code Online (Sandbox Code Playgroud)
但是,当属性可能未定义时,事情就变得有点麻烦了。如果我想获得 Xdcc 的类型...(应该给 {aaa:string} )我该怎么做?或者甚至有可能吗?
以下两次尝试给出错误:
type D_CC1 = X["d"]["cc"]; // …Run Code Online (Sandbox Code Playgroud) 我需要验证字符串架构 format:"date"或 format:"date-time"以仅接受ISO 8601但也允许空字符串 "" (应使用所需的架构单独检查 "" 要求)。
{
"datetime1": {
"type": "string",
"format": "date-time",
}
}
Run Code Online (Sandbox Code Playgroud)
但是,本机 ajv 格式解析器不允许传递空字符串“”。如何使其允许空字符串,并仍然验证 ISO 8601?
我真的必须使用编写自己的格式检查器吗ajv.addFormat()?我也有同样的问题"format": "email",我还需要“”才有效。
注意:我无法修改架构,因此无法添加默认值。
我正在尝试编写代码以在键盘输入时异步搜索多选组合。
然而我在最新版本(5.2.2)中发现了一个我无法解释的奇怪行为。我提炼出以下问题(基于 MUI 自动完成页面的示例):
import * as React from "react";
import TextField from "@mui/material/TextField";
import Autocomplete from "@mui/material/Autocomplete";
const options = [
{ label: "Option 1", value: 1 },
{ label: "Option 2", value: 2 }
];
export default function ControllableStates() {
// const [value, setValue] = React.useState<any | null>([]);
const value = [];
const [inputValue, setInputValue] = React.useState("");
console.log("Current Value:", value);
return (
<div>
<div>{`value: ${value !== null ? `'${value}'` : "null"}`}</div>
<div>{`inputValue: '${inputValue}'`}</div>
<br />
<Autocomplete
multiple={true}
value={value} …Run Code Online (Sandbox Code Playgroud)