这是一个不同于TypeScript中对象字面量中的类型定义的问题
我有一个接口,接受任何对象作为其属性之一:
interface MyType {
/* ... */
options: any;
}
虽然属性选项
可以是任何东西,但有时我想指定某些类型。我不想使用'as'关键字,因为我不想强制它(如果我缺少一个属性,我想看到错误)。
我有一种方法可以做到:
interface MyTypeOptions {
hasName: boolean;
hasValue: boolean;
}
// Declare the options separately just so we can specify a type
const options: MyTypeOptions = {
hasName: false,
hasValue: true
};
const myType: MyType = {
/* ... */
options
}
但是有没有办法在不使用类型断言的情况下将选项内联在 myType
对象文本中同时做到这一点?换句话说,我想这样做:
const myType: MyType = {
/* ... */
// I want to type-check that the following value is of type MyTypeOptions
options: {
hasName: false,
hasValue: true
}
}
你正在寻找仿制药。您可以使MyType
泛型,并将MyTypeOptions
指定为
的类型参数
interface MyTypeOptions {
hasName: boolean;
hasValue: boolean;
}
// Declare the options separately just so we can specify a type
const options: MyTypeOptions = {
hasName: false,
hasValue: true
}
// We specify any as the default to T so we can also use MyType without a type parameter
interface MyType<T = any> {
/* ... */
options: T;
}
const myType: MyType<MyTypeOptions> = {
options: {
hasName: false,
hasValue: true
}
}
在TypeScript类中,可以为属性声明类型,例如:
我想定义一个带有对象和不同类型的接口,例如 在定义上,没有问题,但在调用like后 这不起作用,并出现以下错误 错误错误:未捕获(promise中):TypeError:无法设置未定义的属性“名称”TypeError:无法设置未定义的属性“名称” 有一些相似的主题,但它们并不完全相关。(如何在类型脚本接口中定义对象或者如何在类型脚本中定义对象变量的类型?) 我很感激你帮助我找到解决办法。
如下的 example,我期望可以通过 NewData 这个类型根据 key 取出原始 Data 中对应的值的类型,但是得到的是 never,这是 typescript 的问题吗,可以有其他的办法实现期待的功能吗,求解 https://www.typescriptlang.org/play/?ts=5.6.0-beta#code/C4TwD...
问题内容: 为什么这是错误的: ? 给定一个类对象,没有办法实例化特定类型的类吗? 显然,我永远不会直接这样做,这只是显示所需内容的一个示例。在实际的代码中,我需要不知道类型的名称。例如 问题答案:
比方上面的类型,如果我想要 value 的类型在type为 'string' 时为 string ,在 type 为 'number' 的时候为 number。 要怎么定义这两个属性之间的类型约束?