Classify the urgency by comparing the current time to two timestamps
A couple notes:


Is CardState an enum?  If not, this function doesn't return a CardState object, but rather what appears to be values described within CardState class constants.  Your signature should reflect this.
I honestly don't think it is that problematic to have multiple if conditions as you are doing, as your usage is not increasing cyclomatic complexity of the method.  Now, if you started introducing new states, then it may get unwieldy and be good reason for refactoring.  As your code is now, it is very straightforward and easy to understand.  Why over-complicate?
Is currentTime a good variable name?  This method does nothing to ensure the passed Date object represents a time that is "current". Why name this variable *Time when it holds a Date object?
Consider less verbose determinePackageState vs. determineStateOfPackage package vs. sourcePackage.
You could possibly set getTime() value to constant in order to remove redundant calls (though this is probably splitting hairs).


This might result in (slightly) easier to read code such as:

  static determinePackageState(date: Date, package: Package): CardState {
    const timestamp: number = date.getTime();
    if (package.targetTime.getTime() &lt;= timestamp) {
      return CardState.URGENT;
    }
    if (package.warningTime.getTime() &lt;= timestamp) {
      return CardState.WARNING;
    }
    return CardState.FRIENDLY;
  }