JSFiddle - React, Tailwind, and code Playground
CoffeeScript
ko.extenders.required = (target, option) ->
target.lastInvalid = ko.observable false
target.attempt = ko.computed
read: target
write: (value) ->
if value.length > 0
target value
target.lastInvalid false
else
target.lastInvalid true
target
class @Person
constructor: (name) ->
@name = ko.observable(name).extend({ required: true })
person = new Person('test')
console.log(person.name())
console.log(person.name.lastInvalid())
console.log(person.name.attempt())