Start with proven experience, not the length of the client list. Ask to see three or four engagements that match your stack, and then ask whether those engineers are still with the typescript web development company. A serious vendor will introduce you to the tech lead. Vague answers at this stage almost always mean you are talking to a reseller.
The agreement needs a slower read than the pitch. Three clauses do most of the work: assignment of intellectual property, the NDA, and exit terms and handover. Every artifact has to transfer to you once invoices are settled, together with designs, scripts and infrastructure configuration. Be careful with wording that leaves framework code outside the transfer, because that is often the dependency that makes switching painful.
Ask how they estimate. An honest estimate comes with the assumptions behind it, a task-level breakdown and a range rather than a single number. A fixed custom software price is only reasonable when the scope is genuinely frozen; otherwise the vendor prices the risk in and node vs laravel you fund the buffer regardless. A time-and-materials model puts the risk on your side, so it requires visible weekly reporting and a spending cap.
Process beats headcount. Ask how change requests are handled, who defines done and how quality assurance works. A well-run team should be able to show you a live build at the end of each sprint. Written acceptance criteria remain your only real protection against an argument at delivery time.
Before signing, consider the day you no longer need this vendor at the start rather than at the end. Ask that the repository sits in your organisation from the beginning, and that documentation is written as you go rather than left to the end. A partner who is comfortable with this will agree quickly; a long negotiation over it reveals most of what you need to know.