我的以下代码有一些linter问题,我不明白为什么,因为我允许将日期返回为字符串或null,但是在返回字符串时会带红色下划线。
static test(): { date: string | null, from: string | null, until: string | null } {
let returnObj = {
date: null,
from: null,
until: null
};
// Type 'string' is not assignable to type null
returnObj.date = 'some string';
return returnObj;
}
重要提示:我不想使用@ ts-ignore,因为我有多个类似的作业,因此对每个变量都使用@ ts-ignore会使代码变得丑陋。
谢谢!
答案 0 :(得分:2)
我假设您使用的是--noImplicitAny
和--strictNullChecks
,因为这是使我出错的方法。
问题在于returnObj
中属性的推断类型为null
。
您最好是创建一个界面并使用它:
interface Stuff {
date: string | null;
from: string | null;
until: string | null;
}
class Example {
static test(): Stuff {
let returnObj : Stuff = {
date: null,
from: null,
until: null
};
returnObj.date = 'some string';
return returnObj;
}
}
另一种选择是使用单个变量作为值,然后在最后创建对象:
class Example {
static test(): { date: string | null, from: string | null, until: string | null } {
let date = null;
let from = null;
let until = null;
date = 'some string';
return { date, from, until };
}
}
TypeScript很聪明,可以像这样更新函数中变量的推断类型。 (或者,当然,可以在变量上声明类型,因此不必进行推断。)