Defence Secretary Mark Esper is the latest in a series of officials sacked by Donald Trump

President Donald Trump has sacked Defence Secretary Mark Esper, announcing on Twitter that the top US official has been “terminated”.

Christopher Miller, the current head of the National Counterterrorism Center, will take on the role immediately.

It follows a public falling-out between Mr Trump and Mr Esper in recent weeks.

Mr Trump has so far not conceded the US election to President-elect Joe Biden, and has vowed to challenge the projected result in court.

Mr Esper clashed with the president over the White House’s use of the military to quell public unrest during protests over racial injustice earlier this year.

In the weeks before Mr Biden takes office on 20 January, Mr Trump is still empowered to make decisions.

As protests rocked the US following the death of black man George Floyd at the hands of police in Minneapolis, Minnesota, in May, Mr Trump threatened to use troops to suppress unrest.

In June, Mr Esper, a former army officer, said the use of active-duty forces was unnecessary, in remarks that were known to have displeased the White House.

Following the clash, it was widely-speculated that the president would fire the defence secretary, although on Monday Mr Trump gave no reason for his dismissal.

Mr Esper has also disagreed with Mr Trump over the president’s dismissive attitude towards Nato.

President Trump has fired a significant number of his officials and advisers during his tenure, often using Twitter to announce the dismissal.

Mr Esper’s predecessor was Jim Mattis, who resigned in 2018 over differences with the president including about the war in Syria.

In June, as racial injustice protests were ongoing, Mr Mattis criticised Donald Trump as the “first president in my lifetime who does not try to unite the American people – does not even pretend to try. Instead he tries to divide us.”

NULL Invalid API key or channelobject(stdClass)#8840 (1) { ["error"]=> object(stdClass)#8906 (3) { ["code"]=> int(403) ["message"]=> string(117) "The request cannot be completed because you have exceeded your quota." ["errors"]=> array(1) { [0]=> object(stdClass)#8893 (3) { ["message"]=> string(117) "The request cannot be completed because you have exceeded your quota." ["domain"]=> string(13) "youtube.quota" ["reason"]=> string(13) "quotaExceeded" } } } }