在TypeScript类中,可以为属性声明类型,例如:
class className {
property: string;
};
如何在对象文字中声明属性的类型?
我已经尝试了以下代码,但它不能编译:
var obj = {
property: string;
};
我得到以下错误:
名称“string”在当前作用域中不存在
是我做错了什么还是这是个bug?
在TypeScript类中,可以为属性声明类型,例如:
class className {
property: string;
};
如何在对象文字中声明属性的类型?
我已经尝试了以下代码,但它不能编译:
var obj = {
property: string;
};
我得到以下错误:
名称“string”在当前作用域中不存在
是我做错了什么还是这是个bug?
当前回答
如果你试图向一个解构对象字面量添加类型,例如在函数的参数中,语法是:
function foo({ bar, baz }: { bar: boolean, baz: string }) {
// ...
}
foo({ bar: true, baz: 'lorem ipsum' });
其他回答
用DRY将对象文字转换为类型
只做:
const myObject = {
hello: 'how are you',
hey: 'i am fine thank you'
}
type myObjectType = keyof typeof MyObject
完成工作!
你可以使用预定义的实用程序类型Record<Keys, type >:
const obj: Record<string, string> = {
property: "value",
};
它允许为你的对象文字指定键:
type Keys = "prop1" | "prop2"
const obj: Record<Keys, string> = {
prop1: "Hello",
prop2: "Aloha",
something: "anything" // TS Error: Type '{ prop1: string; prop2: string; something: string; }' is not assignable to type 'Record<Keys, string>'.
// Object literal may only specify known properties, and 'something' does not exist in type 'Record<Keys, string>'.
};
属性值的类型:
type Keys = "prop1" | "prop2"
type Value = "Hello" | "Aloha"
const obj1: Record<Keys, Value> = {
prop1: "Hello",
prop2: "Hey", // TS Error: Type '"Hey"' is not assignable to type 'Value'.
};
在TypeScript中,如果我们声明object,那么我们将使用以下语法:
[access modifier] variable name : { /* structure of object */ }
例如:
private Object:{ Key1: string, Key2: number }
如果你试图写一个类型注释,语法是:
var x: { property: string; } = { property: 'hello' };
如果你试图写一个对象文字,语法是:
var x = { property: 'hello' };
您的代码试图在值位置使用类型名称。
这是我在2021年用TypeScript 4.5做的事情:
const sm = {
reg: {} as ServiceWorkerRegistration,
quantum: null as number | null,
currentCacheName: '' as string, // superfluous
badSWTimer: 0 as number, // superfluous
}
这不仅仅是一个值转换,对于对象属性来说,它的工作原理与接口定义相同。
更新:我包含了两个多余的类型作为示例。也就是说,这些类型可以自动推断,因此不会产生编译器错误。
来源:4.4游乐场