2 回答

TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個贊
您可以通過執(zhí)行以下操作來傳遞任何對象,而無需 Typescript 抱怨:
export function filterVisualData(obj: any) {
const { data, playersOn, typesOn, resultsOn, toBeRemoved, teamsOn, xGOn, shotsOn } = obj
return data.filter(d => {
const result = d.success ? 'Successful' : 'Unsuccessful';
const players = playersOn.length === 0 || (playersOn.length > 0 && playersOn.includes(d.player_name));
const types = typesOn.length === 0 || (typesOn.length > 0 && typesOn.includes(capitalizeAllWords(d.type)));
const results = resultsOn.length === 0 || (resultsOn.length > 0 && resultsOn.includes(result));
const removed = !toBeRemoved.map(p => p.time).includes(d.time);
const shots = shotsOn.length === 0 || (shotsOn.length > 0 && shotsOn.includes(d.type));
const xG = xGOn.length === 0 || (xGOn.length > 0 && d.xG < Math.max(...xGOn));
const teams = teamsOn.length === 0 || (teamsOn.length > 0 && teamsOn.includes(d.team_name));
return players && types && results && removed && shots && xG && teams;
});
}
因此,在編譯時不會出現(xiàn)錯誤,但在運(yùn)行時仍然會出現(xiàn)錯誤。如果你沒有通過playersOn,那么你就會崩潰Cannot read length of undefined。您需要為每個值實(shí)現(xiàn)故障保護(hù)。

TA貢獻(xiàn)1719條經(jīng)驗(yàn) 獲得超6個贊
您還可以利用接口并將Partial其內(nèi)置到 TypeScript 中。
export interface IData {
success: boolean;
player_name: string;
type: string;
time: string;
team_name: string;
}
export interface IBaseArgs {
data: IData[] ,
playersOn: <TypeHere>,
typesOn: <TypeHere>,
resultsOn: <TypeHere>,
toBeRemoved: <TypeHere>,
teamsOn: <TypeHere>,
xGOn: <TypeHere>,
shotsOn: <TypeHere>
}
export function filterVisualData<T extends Partial<IBaseArgs>>(obj: T) {
const {data, playersOn, typesOn, resultsOn, toBeRemoved, teamsOn, xGOn, shotsOn} = obj;
return data.filter(d => {
const result = d.success ? 'Successful' : 'Unsuccessful';
const players = playersOn.length === 0 || (playersOn.length > 0 && playersOn.includes(d.player_name));
const types = typesOn.length === 0 || (typesOn.length > 0 && typesOn.includes(capitalizeAllWords(d.type)));
const results = resultsOn.length === 0 || (resultsOn.length > 0 && resultsOn.includes(result));
const removed = !toBeRemoved.map(p => p.time).includes(d.time);
const shots = shotsOn.length === 0 || (shotsOn.length > 0 && shotsOn.includes(d.type));
const xG = xGOn.length === 0 || (xGOn.length > 0 && d.xG < Math.max(...xGOn));
const teams = teamsOn.length === 0 || (teamsOn.length > 0 && teamsOn.includes(d.team_name));
return players && types && results && removed && shots && xG && teams;
});
}
使用Partial將使所有鍵成為可選鍵,并且該函數(shù)將接受缺少一些鍵的對象。您還將獲得 IntelliSense。
添加回答
舉報(bào)