在TypeScript类中,可以为属性声明类型,例如:
class className {
property: string;
};
如何在对象文字中声明属性的类型?
我已经尝试了以下代码,但它不能编译:
var obj = {
property: string;
};
我得到以下错误:
名称“string”在当前作用域中不存在
是我做错了什么还是这是个bug?
在TypeScript类中,可以为属性声明类型,例如:
class className {
property: string;
};
如何在对象文字中声明属性的类型?
我已经尝试了以下代码,但它不能编译:
var obj = {
property: string;
};
我得到以下错误:
名称“string”在当前作用域中不存在
是我做错了什么还是这是个bug?
当前回答
在你的代码中:
var obj = {
myProp: string;
};
您实际上是在创建一个对象文字,并将变量字符串分配给属性myProp。虽然这是非常糟糕的做法,但这实际上是有效的TS代码(不要使用它!):
var string = 'A string';
var obj = {
property: string
};
然而,你想要的是对象文字的类型。这可以通过多种方式实现:
接口:
interface myObj {
property: string;
}
var obj: myObj = { property: "My string" };
类型别名:
type myObjType = {
property: string
};
var obj: myObjType = { property: "My string" };
对象类型文字:
var obj: { property: string; } = { property: "Mystring" };
其他回答
// Use ..
const Per = {
name: 'HAMZA',
age: 20,
coords: {
tele: '09',
lan: '190'
},
setAge(age: Number): void {
this.age = age;
},
getAge(): Number {
return age;
}
};
const { age, name }: { age: Number; name: String } = Per;
const {
coords: { tele, lan }
}: { coords: { tele: String; lan: String } } = Per;
console.log(Per.getAge());
在你的代码中:
var obj = {
myProp: string;
};
您实际上是在创建一个对象文字,并将变量字符串分配给属性myProp。虽然这是非常糟糕的做法,但这实际上是有效的TS代码(不要使用它!):
var string = 'A string';
var obj = {
property: string
};
然而,你想要的是对象文字的类型。这可以通过多种方式实现:
接口:
interface myObj {
property: string;
}
var obj: myObj = { property: "My string" };
类型别名:
type myObjType = {
property: string
};
var obj: myObjType = { property: "My string" };
对象类型文字:
var obj: { property: string; } = { property: "Mystring" };
我很惊讶没有人提到这一点,但你可以创建一个名为ObjectLiteral的接口,它接受类型string: any的键:值对:
interface ObjectLiteral {
[key: string]: any;
}
然后你可以这样使用它:
let data: ObjectLiteral = {
hello: "world",
goodbye: 1,
// ...
};
一个额外的好处是,您可以根据需要在任意多个对象上多次重用该接口。
祝你好运。
只是扩展@RickLove的回复…
这很好,因为你只需要定义不能推断的类型:
const initialState = {
user: undefined as User | undefined,
userLoading: false
};
它被编译成下面的js代码:
const initialState = {
user: undefined,
userLoading: false
};
如果你需要把它提取成一个类型,你可以这样做:
export type InitState = typeof initialState;
如果你试图向一个解构对象字面量添加类型,例如在函数的参数中,语法是:
function foo({ bar, baz }: { bar: boolean, baz: string }) {
// ...
}
foo({ bar: true, baz: 'lorem ipsum' });