Pretty much yes to all of that. You can add npms as dependencies. Some typescript type annotations can be adapted to Kotlin type annotations. And if not, you can write your own. There's a dynamic keyword to deal with untyped javascript objects. Also you can define external interfaces for things. So, interop is pretty good and you have plenty of tools to integrate whatever. With Fritz2 you can create or integrate web components pretty easily as well.
That being said, it doesn't really make sense to try to use mainstream javascript frameworks as they are a poor fit for a strongly typed language like Kotlin. And in general, there aren't a lot of npms that are worth integrating. We made an exception for leaflet and that was pretty easy to integrate in the end. Otherwise we mostly use multiplatform kotlin libraries.
That being said, it doesn't really make sense to try to use mainstream javascript frameworks as they are a poor fit for a strongly typed language like Kotlin. And in general, there aren't a lot of npms that are worth integrating. We made an exception for leaflet and that was pretty easy to integrate in the end. Otherwise we mostly use multiplatform kotlin libraries.