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())