我已经遇到过多种情况,最好执行以下操作(非常抽象):
export interface FilterItem {
[key: string]: string | undefined;
stringArray?: string[];
}
Run Code Online (Sandbox Code Playgroud)
只有这样才会抛出错误,因为string[]不可分配给string,这是有道理的。
我只是想知道是否有可能,如果可以,如何创建一个接口,该接口定义了一些属性,例如stringArray可能不遵循关键索引签名的属性。因此,键索引签名的目的只是为每个其他属性定义类型。
是否可以?
我从 TypeScript 文档中读到,您无法访问未知类型的属性:
// No property accesses, element accesses, or function calls
function f11(x: unknown) {
x.foo; // Error
x[5]; // Error
x(); // Error
new x(); // Error
}
Run Code Online (Sandbox Code Playgroud)
但我不明白为什么?如果我可以分配包括对象在内的每个值,为什么我不能访问这些属性?
我正在与以下场景作斗争:我有一个类型的对象,any我将它传递给Object.entries方法,然后调用forEach.
因为它是 type any,所以 forEach 调用参数将是一个数组,其中第一个元素是 string 类型,第二个元素是 unknown 类型。
在我的情况下,第二个元素是一个对象,但我无法在不转换其类型的情况下访问其属性,这似乎是错误的。
这是一个抛出 TS 错误的示例(只是一个抽象,我知道在这种情况下将其声明为 any 没有意义):
const obj: any = {
val1: "someval",
val2: {
some: "some",
object: "object",
},
};
Object.entries(obj).forEach(el => {
if (el[1].some) {
console.log(el);
}
});
Run Code Online (Sandbox Code Playgroud)
Object.entries我猜这也可能只是方法的错误类型,但我仍然想解释一下,为什么我不能访问类型未知的属性。 …
我被一个小问题所困扰:
const foo = ["foo", "bar"]; // type "string[]"
const foundFoo = foo.find(fooEl => fooEl === "notFooBar"); // type "string" -> why not "string | undefined"
Run Code Online (Sandbox Code Playgroud)
我检查了类型定义array.find,它确实说它可能返回未定义。为什么我的环境说 is foundFooof typestring而不是string | undefined?
我在 StackOverflow 上发现的与此相关的唯一其他问题几乎提出了相反的问题,为什么它“可能”未定义,所以我不确定为什么我的环境说相反的内容。
在我的扩展中,我使用tca/override文件夹中的tablename.php文件来覆盖由另一个扩展名定义的一些内容.我知道我可以这样做:
$GLOBALS['TCA']['tablename']['columns']['anoption']['config']['minitems'] = 1;
Run Code Online (Sandbox Code Playgroud)
但是当原始文件说:
... 'anoption''config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig(
'anoption',
['maxitems' => 7,]
Run Code Online (Sandbox Code Playgroud)
什么是覆盖语法?我在尝试这样的事情:
$GLOBALS['TCA']['tablename']['columns']['anoption']['config']['anoption']['maxitems'] = 3;
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我不知道我在配置后插入什么,因为在原始文件中有getFileTCAConfig函数.
另外我想知道如何调试"$ GLOBALS ['TCA'] ['tablename'] ['columns'] ['anoption']"以某种方式查看所有子选项,因为我在mysql数据库中找不到任何内容,我无法从phpMyAdmin读取任何配置.
我感谢所有的帮助!