Mad*_*unk 1 intellisense types typescript
我正在尝试输入一个对象,以便它的键都是特定类型,但这样当我访问主对象时我仍然可以获得智能感知。
interface ObjectWithKeysOf<T>
{
[key: string]: T;
}
const TEST: ObjectWithKeysOf<number> =
{
prop1: 1,
prop2: 2
};
Run Code Online (Sandbox Code Playgroud)
鉴于上述情况,我希望以下内容能够发挥作用,但事实并非如此。智能感知不建议prop1作为属性,并且代码无法编译。
const aNumber = TEST.prop1;
Run Code Online (Sandbox Code Playgroud)
这可能吗?
您可以使用TypeScript v 中引入的satisfies运算符 \xe2\x80\x944.9运算符\xe2\x80\x94 来约束类型,同时保留其细节(包括 IntelliSense 自动完成):
在TS Playground中尝试一下:
\nconst test = {\n prop1: 1,\n prop2: 2,\n} satisfies Record<string, number>;\n\ntest.prop1;\n //^? (property) prop1: number\n\ntest.prop2;\n //^? (property) prop2: number\n\ntest.prop3; /*\n ~~~~~\nProperty \'prop3\' does not exist on type \'{ prop1: number; prop2: number; }\'. Did you mean \'prop1\'?(2551) */\n\nRun Code Online (Sandbox Code Playgroud)\n相同的示例,但结合了const断言:
const test = {\n prop1: 1,\n prop2: 2,\n} as const satisfies Record<string, number>;\n\ntest.prop1;\n //^? (property) prop1: 1\n\ntest.prop2;\n //^? (property) prop2: 2\n\ntest.prop3; /*\n ~~~~~\nProperty \'prop3\' does not exist on type \'{ readonly prop1: 1; readonly prop2: 2; }\'. Did you mean \'prop1\'?(2551) */\n\nRun Code Online (Sandbox Code Playgroud)\n另请参阅类型实用程序Record<Keys, Type>。
| 归档时间: |
|
| 查看次数: |
890 次 |
| 最近记录: |