Skin layer and valid file extensions

How is the angular app deployed?
Inside a Plone package or separate as static website in apache/nginx?

In Angular & co you can define a base url/path and use it for static files, so it should not be a problem how the url's look. In other systems they are more ugly anyway ;).
You would than access all url's inside your app like /static/my-file.rtf and the routing of Angular knows where to go in the backend for file in /static path.

You have to put something like this in the __init__.py of your Plone add-on:

from Products.CMFCore.DirectoryView import registerFileExtension
from Products.CMFCore.FSFile import FSFile

registerFileExtension('ttf', FSFile)
registerFileExtension('woff', FSFile)
registerFileExtension('eot', FSFile)
registerFileExtension('svg', FSFile)

Source: https://github.com/zopefoundation/Products.CMFCore/blob/31a22235056d736e1b661a5f5758ce968351d87d/Products/CMFCore/FSFile.py#L202

By the way, there is a commit to add woff and some other extensions, but it is not released yet. Probably will be part of the next Plone release.

Warning: As others already have said, skin layers are deprecated and you should use static resources instead.

Plone Foundation Code of Conduct