如何指定文字对象的类型并遵守 TSLint?
How to specify type of literal object and comply with TSLint?
TSLint 将这两个标记为错误:
const a = {} as MyClass; // no-object-literal-type-assertion
const a = <MyClass>{}; // no-angle-bracket-type-assertion
以及使用显式类型的建议:
let a: MyClass
但是当只使用文字而不使用赋值时你应该使用什么?
return { name: 'john' } as MyClass
return <MyClass> { name: 'john' }
在不声明变量的情况下可以使用什么替代方法?
您可以内嵌显式接口定义。从示例开始:
interface IGuy {
name: string;
age: number;
}
const guy: IGuy = {name: 'N', age: 1 };
通过对格式稍作改动,我们可以将相同的接口显式和匿名地内联:
const guy: { name: string, age: number } = {name: 'N', age: 1 };
它也适用于函数签名:
myFunction(guy: { name: string, age: number)) { //
这很适合对象解构:
myFunction({ name, age }: { name: string, age: number) { //
如果你的输出 return 值匹配函数 return 签名,你应该没问题,如果这对你来说没问题:
function myFunction(): { name: string, age: number} {
return { name: 'N', age: 1 };
}
TSLint 将这两个标记为错误:
const a = {} as MyClass; // no-object-literal-type-assertion
const a = <MyClass>{}; // no-angle-bracket-type-assertion
以及使用显式类型的建议:
let a: MyClass
但是当只使用文字而不使用赋值时你应该使用什么?
return { name: 'john' } as MyClass
return <MyClass> { name: 'john' }
在不声明变量的情况下可以使用什么替代方法?
您可以内嵌显式接口定义。从示例开始:
interface IGuy {
name: string;
age: number;
}
const guy: IGuy = {name: 'N', age: 1 };
通过对格式稍作改动,我们可以将相同的接口显式和匿名地内联:
const guy: { name: string, age: number } = {name: 'N', age: 1 };
它也适用于函数签名:
myFunction(guy: { name: string, age: number)) { //
这很适合对象解构:
myFunction({ name, age }: { name: string, age: number) { //
如果你的输出 return 值匹配函数 return 签名,你应该没问题,如果这对你来说没问题:
function myFunction(): { name: string, age: number} {
return { name: 'N', age: 1 };
}