Hello friends,
They work like such:
// See if one of the payreturns has a property called PayRule, which equals overtimeRuleId
// also takes a single PayReturn object if you wanna
expect(arrayOfPayreturns).to.have.payrule(overtimeRuleId, "custom failure message")
// See if the object has a property called Value, with a value of 30
expect(payreturn).to.have.Value(30, "custom failure message")
Pretty straightforward, but I don't use them too often and always have to go back and check what the expected arguments are. Even if I did have a better memory, I wouldn't want to inflict this experience on anyone who uses my library in future. The inbuilt chai assertions don't have this issue, because my IDE (jetbrains webstorm/intellij) recognises their signature and gives me a lovely little tooltip like so:

Hitting 'go to definition' on the inbuilt 'equals' assertion takes me to a typescript file, index.d.ts, which I guess is where webstorm gets the signature from. But I can't figure out how it works, and am not sure what terms I should google in order to learn. Would anyone be able to point me in the right direction?
Cheers!