typescript - 在 Typescript 的对象文字中指定值的类型?
问题描述
这是一个与TypeScript in object literal 中的类型定义不同的问题
我有一个接受任何对象作为其属性之一的接口:
interface MyType {
/* ... */
options: any;
}
虽然属性options
可以是任何东西,但有时我想指定某些类型。我不想使用“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
为类型参数MyType
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
}
}
推荐阅读
- c++ - 从内存导入密钥时出现 Crypto++ BERDecode 异常?
- python - DSaaS 使用 Python 添加全局规则
- python - 在小提琴图中可视化线图
- java - 如何将 MockWebServer 中的响应分配给预期的请求?
- python - 如何监督变分自动编码器 (VAE) 中的潜在变量
- rxjs - 使用 rxjs mergeMap() 发出并发请求是顺序的
- python - 从 python 和 android 评估 tflite 模型时的不同结果
- amazon-web-services - 连接到 aws redis elasticache 的生菜客户端配置
- python - 当我将我的 Py 文件转换为 exe 时,我收到“[1516]Failed to execute script”错误
- html - 如何对齐对话框角材料内右上角的按钮?