gpt4 book ai didi

typescript - 如何将对象的类型声明为任何类而不是原始类型

转载 作者:搜寻专家 更新时间:2023-10-30 21:24:47 26 4
gpt4 key购买 nike

在 TypeScript 中是否可以指定对象的类型可以是任何类,但不能是原始类型。

类似的东西,但有这个限制:

myObj<any>;

感谢您的帮助!

最佳答案

嗯,让我们看看...

TypeScript 编译器不会将基元识别为具有字符串键属性的对象,并且由于对象类型始终具有 string键和 any这些键的值,以下类型定义似乎就足够了:

function noPrimitives(a: { [key: string]: any }) {
// ...
}

也就是一个对象a具有基于字符串的键和 any与这些属性键关联的值(基元本身没有基于字符串的属性键)。以下测试似乎验证了我的假设;无法识别数字、字符串和 bool 文字的属性:

noPrimitives(5); // arguments of type 'number' is not assignable [...]
noPrimitives("five"); // arguments of type 'string' is not assignable [...]
noPrimitives(true); // arguments of type 'boolean' is not assignable [...]

noPrimitives(new Number(5)); // ok
noPrimitives(new String("five")); // ok
noPrimitives(new Boolean(true)); // ok
noPrimitives(new Date()); // ok
noPrimitives(null); // ok (typeof null === "object")

它似乎也适用于具有数字索引器的类型(大概是因为 Javascript 无论如何都会将数字键转换为字符串):

var a: { [key: number]: any };

noPrimitives(a); // ok
noPrimitives(new Array()); // ok
noPrimitives([]); // ok

Something like that but with this restriction: myObj<any>

这实际上不是限制,而是有效地禁用此限制,即编译时类型检查功能。如果您碰巧需要在函数或方法中解除它,只需分配给类型为 any 的变量即可。 :

function noPrimitives(a: { [key: string]: any }) {
var _a: any = a;
// ...
}

如果您不在函数作用域内并且不想创建新变量,则需要使用 any 的类型断言(相当于类型转换的 TypeScript) :

var a: { [key: string]: any };

// ...

(a as any).anyMethod();

关于typescript - 如何将对象的类型声明为任何类而不是原始类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35648513/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com